Поделиться через


Возможности REST API FHIR для Api Azure для FHIR

В этой статье мы рассмотрим некоторые нюансы взаимодействия с RESTful Azure API для FHIR.

Условное создание или обновление

Api Azure для FHIR поддерживает создание, условное создание, обновление и условное обновление в соответствии со спецификацией FHIR. Одним из полезных заголовков в этих сценариях является заголовок If-Match . Используется If-Match заголовок, который проверяет обновляемую версию перед обновлением. ETag Если объект не соответствует ожидаемому ETag, появится сообщение об ошибке 412 .

Удаление и условное удаление

Azure API для FHIR предлагает два типа удаления. Существует удаление, которое также называется "Жесткое + обратимое удаление", и условное удаление.

Удаление (жесткое + обратимое удаление)

Удаление, определенное спецификацией FHIR, требует, чтобы после удаления ресурса последующие операции чтения ресурса, не относящиеся к версии, возвращали код состояния HTTP 410. Таким образом, ресурс больше не будет найден с помощью поиска. Кроме того, Azure API для FHIR позволяет полностью удалить ресурс (включая весь журнал). Чтобы полностью удалить ресурс, можно передать параметры hardDelete параметра в значение true (DELETE {{FHIR_URL}}/{resource}/{id}?hardDelete=true). Если этот параметр не передается или не задано значение hardDelete false, исторические версии ресурса по-прежнему будут доступны.

Примечание

Если вы хотите удалить только журнал, API Azure для FHIR поддерживает пользовательскую операцию с именем $purge-history. Эта операция позволяет удалить журнал из ресурса.

Условное удаление

Условное удаление позволяет передать условия поиска для удаления ресурса. По умолчанию условное удаление позволяет удалять по одному элементу за раз. Вы также можете указать параметр для одновременного _count удаления до 100 элементов. Ниже приведены некоторые примеры использования условного удаления.

Чтобы удалить один элемент с помощью условного удаления, необходимо указать условия поиска, возвращающие один элемент.

DELETE https://{{FHIR_URL}}/Patient?identifier=1032704

Вы можете выполнить тот же поиск, но включить hardDelete=true для удаления всех журналов.

DELETE https://{{FHIR_URL}}/Patient?identifier=1032704&hardDelete=true

Чтобы удалить несколько ресурсов, включите _count=100 параметр . Этот параметр удалит до 100 ресурсов, соответствующих условиям поиска.

DELETE https://{{FHIR_URL}}/Patient?identifier=1032704&_count=100

Восстановление удаленных файлов

Если вы не используете параметр жесткого удаления, записи в Azure API для FHIR должны по-прежнему существовать. Записи можно найти, выполнив поиск в журнале ресурса и найдя последнюю версию с данными.

Если идентификатор удаленного ресурса известен, используйте следующий шаблон URL-адреса:

<FHIR_URL>/<resource-type>/<resource-id>/_history

Пример: https://myworkspace-myfhirserver.fhir.azurehealthcareapis.com/Patient/123456789/_history

Если идентификатор ресурса неизвестный, выполните поиск по журналу по всему типу ресурса:

<FHIR_URL>/<resource-type>/_history

Пример: https://myworkspace-myfhirserver.fhir.azurehealthcareapis.com/Patient/_history

После того как вы найдете запись, которую нужно восстановить, используйте PUT операцию , чтобы повторно создать ресурс с тем же идентификатором, или используйте POST операцию , чтобы создать новый ресурс с теми же сведениями.

Примечание

Срок действия журнала или обратимого удаления данных отсутствует. Единственный способ удалить журнал или обратимо удаленные данные — выполнить жесткое удаление или операцию очистки журнала.

Исправление и условное исправление

Исправление — это ценная операция RESTful, когда необходимо обновить только часть ресурса FHIR. С помощью исправления можно указать элементы, которые требуется обновить в ресурсе, не обновляя всю запись. FHIR определяет три способа исправления ресурсов: исправление JSON, исправление XML и исправление FHIRPath. Служба FHIR поддерживает как исправление JSON, так и исправление FHIRPath, а также условное исправление JSON и условное исправление FHIRPath (которое позволяет исправлять ресурс на основе условий поиска, а не идентификатора ресурса). Чтобы просмотреть некоторые примеры, ознакомьтесь с примерами REST-файла исправления FHIRPath и REST-файлами JSON Patch для каждого подхода. Дополнительные сведения см. в документации по HL7 по операциям исправлений с помощью FHIR.

Примечание

При использовании PATCH для STU3 и при запросе пакета журнала исправленный ресурс Bundle.entry.request.method сопоставляется с PUT. Это связано с тем, что STU3 не содержит определения для PATCH команды в наборе значений HTTPVerb.

Исправление с помощью исправления FHIRPath

Этот метод исправления является наиболее эффективным, так как он использует FHIRPath для выбора целевого элемента. Одним из распространенных сценариев является использование FHIRPath Patch для обновления элемента в списке без знания порядка списка. Например, если вы хотите удалить данные о домашних телекоммуникациях пациента, не зная индекса, можно использовать приведенный ниже пример.

PATCH http://{FHIR-SERVICE-HOST-NAME}/Patient/{PatientID}
Тип содержимого: application/fhir+json

{
    "resourceType": "Parameters",
    "parameter": [
        {
            "name": "operation",
            "part": [
                {
                    "name": "type",
                    "valueCode": "delete"
                },
                {
                    "name": "path",
                    "valueString": "Patient.telecom.where(use = 'home')"
                }
            ]
        }
    ]
}

Для всех операций исправления FHIRPath должен быть application/fhir+json задан заголовок Content-Type. FHIRPatch Patch поддерживает операции добавления, вставки, удаления, удаления и перемещения. Операции исправления FHIRPatch также можно легко интегрировать в пакеты. Дополнительные примеры см. в примере REST-файла исправления FHIRPath.

Исправление с помощью исправления JSON

Исправление JSON в службе FHIR соответствует хорошо используемой спецификации, определенной целевой группы по разработке в Интернете. Формат полезных данных не использует ресурсы FHIR и вместо этого использует документ JSON, использующий JSON-Pointers для выбора элементов. Json Patch является более компактным и имеет тестовую операцию, которая позволяет проверить правильность условия перед выполнением исправления. Например, если вы хотите задать пациента как умершего только в том случае, если он еще не помечен как умерший, можно использовать приведенный ниже пример.

PATCH http://{FHIR-SERVICE-HOST-NAME}/Patient/{PatientID}
Тип содержимого: application/json-patch+json

[
	{
		"op": "test",
		"path": "/deceasedBoolean",
		"value": false
	},
	{
		"op": "replace",
		"path": "/deceasedBoolean",
		"value": true
	}
]

Для всех операций исправления JSON должен быть application/json-patch+json задан заголовок Content-Type. Json Patch поддерживает операции добавления, удаления, замены, копирования, перемещения и тестирования. Дополнительные примеры см. в примере ФАЙЛА JSON Patch REST.

Исправление JSON в пакетах

По умолчанию исправление JSON не поддерживается в ресурсах пакета. Это связано с тем, что пакет поддерживает только ресурсы FHIR, а полезные данные JSON Patch не являются ресурсом FHIR. Чтобы обойти это, мы будем использовать двоичные ресурсы с типом содержимого "application/json-patch+json" и кодировкой Base64 полезных данных JSON внутри пакета. Сведения об этом обходном пути см. в этой статье на FHIR Chat Zulip.

В приведенном ниже примере мы хотим изменить пол для пациента на женский. Мы взяли исправление [{"op":"replace","path":"/gender","value":"female"}] JSON и закодировали его в base64.

POST https://{FHIR-SERVICE-HOST-NAME}/
Content-Type: application/json

{
	"resourceType": "Bundle",
	"id": "bundle-batch",
	"type": "batch",
	"entry": [
		{
			"fullUrl": "Patient/{PatientID}",
			"resource": {
				"resourceType": "Binary",
				"contentType": "application/json-patch+json",
				"data": "W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9nZW5kZXIiLCJ2YWx1ZSI6ImZlbWFsZSJ9XQ=="
			},
			"request": { 
				"method": "PATCH",
				"url": "Patient/{PatientID}"
			}
		}
	]
}

Дальнейшие действия

В этой статье вы узнали о некоторых возможностях REST Azure API для FHIR. Далее вы можете узнать больше о ключевых аспектах поиска ресурсов в FHIR.

(FHIR®) — это зарегистрированная торговая марка организации HL7, которая используется с разрешения HL7.