View a markdown version of this page

Modification des ressources à l'aide de l'opération PATCH - AWS HealthLake

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Modification des ressources à l'aide de l'opération PATCH

AWS HealthLake prend en charge l'opération PATCH pour les ressources FHIR, vous permettant de modifier les ressources en ciblant des éléments spécifiques à ajouter, remplacer ou supprimer sans mettre à jour l'intégralité de la ressource. Cette opération est particulièrement utile lorsque vous devez :

  • Procéder à des mises à jour ciblées à des ressources importantes

  • Réduire l'utilisation de la bande passante du réseau

  • Effectuer des modifications atomiques sur des éléments de ressources spécifiques

  • Minimisez le risque de remplacer des modifications simultanées

  • Mettre à jour les ressources dans le cadre des flux de travail par lots et par transactions

Formats PATCH pris en charge

AWS HealthLake prend en charge deux formats PATCH standard :

Correctif JSON (RFC 6902)

Utilise la syntaxe du pointeur JSON pour cibler les éléments en fonction de leur position dans la structure des ressources.

Type de contenu : application/json-patch+json

FHIRPath Patch (spécification FHIR R4)

Utilise des FHIRPath expressions pour cibler les éléments en fonction de leur contenu et de leurs relations, offrant ainsi une approche native du FHIR pour l'application de correctifs.

Type de contenu : application/fhir+json

Usage

Opérations PATCH directes

L'opération PATCH peut être invoquée directement sur les ressources FHIR à l'aide de la méthode HTTP PATCH :

PATCH [base]/[resource-type]/[id]{?_format=[mime-type]}

PATCH en packs

Les opérations PATCH peuvent être incluses sous forme d'entrées dans des ensembles FHIR de type batch outransaction, ce qui vous permet de combiner des opérations de correctif avec d'autres interactions FHIR (création, lecture, mise à jour, suppression) dans une seule demande.

  • Packs de transactions : toutes les entrées réussissent ou échouent de manière atomique

  • Batch bundles : chaque entrée est traitée indépendamment

Format de correctif JSON

Opérations prises en charge

Opération Description
add Ajouter une nouvelle valeur à la ressource
remove Supprimer une valeur de la ressource
replace Remplacer une valeur existante dans la ressource
move Supprimer une valeur d'un emplacement et l'ajouter à un autre
copy Copier une valeur d'un emplacement à un autre
test Vérifiez qu'une valeur à l'emplacement cible est égale à une valeur spécifiée

Syntaxe du chemin

Le patch JSON utilise la syntaxe du pointeur JSON (RFC 6901) :

Exemple de chemin Description
/name/0/family Élément de famille du prénom
/telecom/- Ajouter au réseau de télécommunications
/active Élément actif au niveau de la racine
/address/0/line/1 Deuxième ligne de la première adresse

Exemples

Demande de correctif JSON directe avec plusieurs opérations

PATCH [base]/Patient/example Content-Type: application/json-patch+json If-Match: W/"1" [ { "op": "replace", "path": "/name/0/family", "value": "Smith" }, { "op": "add", "path": "/telecom/-", "value": { "system": "phone", "value": "555-555-5555", "use": "home" } }, { "op": "remove", "path": "/address/0" }, { "op": "move", "from": "/name/0/family", "path": "/name/1/family" }, { "op": "test", "path": "/gender", "value": "male" }, { "op": "copy", "from": "/name/0", "path": "/name/1" } ]
Demande de correctif JSON directe avec une seule opération

PATCH [base]/Patient/example Content-Type: application/json-patch+json [ { "op": "replace", "path": "/active", "value": false } ]
Patch JSON dans le bundle

Utilisez une ressource binaire contenant la charge utile du patch JSON codé en base64 :

{ "resourceType": "Bundle", "type": "transaction", "entry": [{ "resource": { "resourceType": "Binary", "contentType": "application/json-patch+json", "data": "W3sib3AiOiJhZGQiLCJwYXRoIjoiL2JpcnRoRGF0ZSIsInZhbHVlIjoiMTk5MC0wMS0wMSJ9XQ==" }, "request": { "method": "PATCH", "url": "Patient/123" } }] }

FHIRPath Format du correctif

Opérations prises en charge

Opération Description
add Ajouter un nouvel élément à une ressource
insert Insérer un élément à un endroit précis dans une liste
delete Supprimer un élément d'une ressource
replace Remplacer la valeur d'un élément existant
move Réorganiser les éléments d'une liste

Syntaxe du chemin

FHIRPath Le correctif utilise des FHIRPath expressions prenant en charge :

  • Accès basé sur un index : Patient.name[0]

  • Filtrer avec where() : Patient.name.where(use = 'official')

  • Logique booléenne : Patient.telecom.where(system = 'phone' and use = 'work')

  • Fonctions de sous-définition :first(), last()

  • Contrôles d'existence :exists(), count()

  • Navigation polymorphe : Observation.value

Exemples

Demande de FHIRPath correctif directe

PATCH [base]/Patient/123 Content-Type: application/fhir+json Authorization: ... { "resourceType": "Parameters", "parameter": [{ "name": "operation", "part": [ { "name": "type", "valueCode": "add" }, { "name": "path", "valueString": "Patient" }, { "name": "name", "valueString": "birthDate" }, { "name": "value", "valueDate": "1990-01-01" } ] }] }
FHIRPath Patch dans le bundle

Utilisez une ressource Parameters comme ressource d'entrée avec method: PATCH :

{ "resourceType": "Bundle", "type": "transaction", "entry": [{ "resource": { "resourceType": "Parameters", "parameter": [{ "name": "operation", "part": [ { "name": "type", "valueCode": "add" }, { "name": "path", "valueString": "Patient" }, { "name": "name", "valueString": "birthDate" }, { "name": "value", "valueDate": "1990-01-01" } ] }] }, "request": { "method": "PATCH", "url": "Patient/123" } }] }

En-têtes de demande

En-tête Obligatoire Description
Content-Type Oui application/json-patch+jsonpour JSON Patch ou application/fhir+json pour FHIRPath Patch
If-Match Non Mise à jour conditionnelle spécifique à la version à l'aide de ETag

Exemple de réponse

L'opération renvoie la ressource mise à jour avec les nouvelles informations de version :

HTTP/1.1 200 OK Content-Type: application/fhir+json ETag: W/"2" Last-Modified: Mon, 05 May 2025 10:10:10 GMT { "resourceType": "Patient", "id": "example", "active": true, "name": [ { "family": "Smith", "given": ["John"] } ], "telecom": [ { "system": "phone", "value": "555-555-5555", "use": "home" } ], "meta": { "versionId": "2", "lastUpdated": "2025-05-05T10:10:10Z" } }

Comportement

L'opération PATCH :

  • Valide la syntaxe du correctif conformément à la spécification appropriée (RFC 6902 pour le correctif JSON, FHIR R4 pour le correctif) FHIRPath

  • Applique les opérations de manière atomique : toutes les opérations réussissent ou échouent

  • Met à jour l'ID de version de la ressource et crée une nouvelle entrée d'historique

  • Préserve la ressource d'origine dans l'historique avant d'appliquer les modifications

  • Valide les contraintes de ressources FHIR après l'application des correctifs

  • Supporte les mises à jour conditionnelles à l'aide de l'en-tête If-Match avec ETag

Gestion des erreurs

L'opération gère les conditions d'erreur suivantes :

  • 400 Mauvaise demande : syntaxe de correctif non valide (demande non conforme ou document de correctif mal formé)

  • 404 Introuvable : ressource introuvable (l'ID spécifié n'existe pas)

  • 409 Conflit : conflit de version (mises à jour simultanées ou identifiant de version non actuel fourni)

  • 422 Entité non traitable : les opérations de correctif ne peuvent pas être appliquées aux éléments de ressource spécifiés

Résumé des capacités

Capacité Correctif JSON FHIRPath Patch
Type de contenu application/json-patch+json application/fhir+json
Format du chemin Pointeur JSON (RFC 6901) FHIRPath expressions
API PATCH directe Pris en charge Pris en charge
Bundle Batch Pris en charge (via le binaire) Pris en charge (via les paramètres)
Transaction groupée Pris en charge (via le binaire) Pris en charge (via les paramètres)
Opérations ajouter, supprimer, remplacer, déplacer, copier, tester ajouter, insérer, supprimer, remplacer, déplacer

Limitations

  • Les opérations PATCH conditionnelles utilisant des conditions de recherche ne sont pas prises en charge

  • Les patchs JSON intégrés aux bundles doivent utiliser des ressources binaires avec un contenu codé en base64

  • FHIRPath Les packs de patchs doivent utiliser les ressources de paramètres

Ressources supplémentaires

Pour plus d'informations sur les opérations PATCH, voir :