Подписка на изменение ресурса
Описание
Сервис поддерживает подмножество спецификации http://www.hl7.org/fhir/subscription.html по подписке на изменение ресурсов на сервере. Пользователь может создать одну или несколько подписок. В подписке указывается критерий срабатывания, например, изменение любого доступного ресурса Task
и обратный адрес. При изменени ресурса пользователь получит обратный вызов с информацией о изминившемся ресурсе на обратный адрес.
Создание подписки
Подписка создается как ресурс Subscription стандарта FHIR.
POST fhir/Subscription
Имя | Location | Описание |
---|---|---|
Authorization | Header | см. Авторизация |
Subscription | object | Объект Subscription в спецификации FHIR |
При создании ресурс Subscription должен удовлетворять следующий условиям:
Поле | Описание | Пример |
---|---|---|
criteria | Тип ресурса, на который происходит подписка. При изменении ресурса, соответствующего типа, высылается оповещение | "Observation" |
channel.endpoint | Url адрес, куда будет выполнен запрос при нотификации | "https://yourdomain.com/on-task-change" |
channel.type | Поддерживается только rest-hook | "rest-hook" |
channel.payload | (Опционально) Задает формат в котором будет выслан измененный fhir ресурс. Если задан, то должен быть "application/fhir+json" | "application/fhir+json" |
status | Статус заявки, при создании должен быть requested | "requested" |
Критерий поиска (поле criteria
) в текущей реализации может быть равен только типу ресурса. Нарпимер, можно подписаться на изменения всех доступных ресурсов Task
, указав "criteria": "Task"
.
Пример:
{
"resourceType": "Subscription",
"criteria": "Task",
"status": "requested",
"channel": {
"type": "rest-hook",
"endpoint": "https://yourdomain.com/on-task-change",
"header": [
"Authorization: Bearer secret-token-abc-123"
]
}
}
Обратный вызов
При обновлении или добавлении любых ресурсов, которые соответствуют критериям поиска в ресурсе Subscription, будет послан запрос POST.
Поддерживатеся два режима работы:
- Получение id ресурса
- Получение всего ресруса
Обратный вызов с id ресурса
Если при создании Subscription не заполнено поле payload, то обратный вызов будет содержать заголовок Location, где будет указана относительная ссылка на созданный или обновленный ресурс.
Обратный вызов с полным ресурсом
Если при создании Subscription поле payload заполнено значением "application/fhir+json", то обратный вызов будет содержать в теле обновленный ресурс.
Авторизация обратного вызова
При создании подписки можно указать произвольные заголовки в т.ч. Authorization, которые будут вставлены в обратный запрос. Сервис сам не перезапрашивает токен, а только вставляет заголовок, следовательно токен должен иметь достаточно долгое время жизни.
Жизненный статус подписки
Заявка должна создаваться со статусом requested
. Сервис попытается послать запрос на указанный endpoint
один или несколько раз. В случае успешного ответа от endpoint выставит статус подписки в active
, в противном случае, в значение error
и подписка будет считаться не активной.
Если при нотификации сервис не доступен или отвечает ошибочными статусами ответа 4XX или 5XX, то сервис повторяет попытку и переводит подписку в статус error
.
Если подписка переводится в статус error
, то поле error
ресурса Subscription заполняется сообщением об ошибке.
Клиент может восстановить подписку из статуса error
, для этого он должен создать новую версию подписки со статусом requested
. Автоматической попытки восстановления подписки не производится.
Обновление (создание новой версии) ресурса:
PUT fhir/Subscription
Имя | Location | Описание |
---|---|---|
Authorization | Header | см. Авторизация |
If-Match | Header | Из заголовка ETag при получении ресурса. Пример: If-Match: W/"1" |
Subscription | object | Объект Subscription в спецификации FHIR |
Повторные отправки
Повторные отправки не поддерживаются. Данные, которые обновлялись при выключеной подписке, необходимо получать поиском.
Права доступа
Создатель подписки будет получать уведомление об изменениях ресурса, для которого он является владельцем или имеет права на чтение.