View a markdown version of this page

Modificando recursos com a operação PATCH - AWS HealthLake

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Modificando recursos com a operação PATCH

AWS HealthLake suporta a operação PATCH para recursos do FHIR, permitindo que você modifique recursos direcionando elementos específicos para adicionar, substituir ou excluir sem atualizar o recurso inteiro. Essa operação é particularmente útil quando você precisa:

  • Faça atualizações direcionadas para grandes recursos

  • Reduza o uso da largura de banda da rede

  • Execute modificações atômicas em elementos de recursos específicos

  • Minimize o risco de sobrescrever alterações simultâneas

  • Atualize recursos como parte dos fluxos de trabalho em lotes e transações

Formatos PATCH suportados

AWS HealthLake suporta dois formatos PATCH padrão:

Correção JSON (RFC 6902)

Usa a sintaxe JSON Pointer para direcionar elementos de acordo com sua posição na estrutura do recurso.

Tipo de conteúdo: application/json-patch+json

FHIRPath Patch (especificação FHIR R4)

Usa FHIRPath expressões para direcionar elementos de acordo com seu conteúdo e relacionamentos, fornecendo uma abordagem nativa do FHIR para a aplicação de patches.

Tipo de conteúdo: application/fhir+json

Usage

Operações diretas de PATCH

A operação PATCH pode ser invocada diretamente nos recursos do FHIR usando o método PATCH HTTP:

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

PATCH em pacotes

As operações PATCH podem ser incluídas como entradas em pacotes FHIR do tipo batch outransaction, permitindo que você combine operações de patch com outras interações FHIR (criar, ler, atualizar, excluir) em uma única solicitação.

  • Pacotes de transações: todas as entradas são bem-sucedidas ou falham atomicamente

  • Pacotes em lote: cada entrada é processada de forma independente

Formato de patch JSON

Operações com Suporte

Operation Description
add Adicione um novo valor ao recurso
remove Remover um valor do recurso
replace Substituir um valor existente no recurso
move Remover um valor de um local e adicioná-lo a outro
copy Copiar um valor de um local para outro
test Teste se um valor no local de destino é igual a um valor especificado

Sintaxe do caminho

O JSON Patch usa a sintaxe JSON Pointer (RFC 6901):

Exemplo de caminho Description
/name/0/family Elemento familiar do primeiro nome
/telecom/- Anexar à matriz de telecomunicações
/active Elemento ativo no nível da raiz
/address/0/line/1 Segunda linha do primeiro endereço

Exemplos

Solicitação direta de patch JSON com várias operações

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" } ]
Solicitação direta de patch JSON com operação única

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

Use um recurso binário contendo a carga útil do patch JSON codificada em base64:

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

FHIRPath Formato do patch

Operações com Suporte

Operation Description
add Adicionar um novo elemento a um recurso
insert Inserir um elemento em uma posição específica em uma lista
delete Remover um elemento de um recurso
replace Substituir o valor de um elemento existente
move Reordenar elementos em uma lista

Sintaxe do caminho

FHIRPath O patch usa FHIRPath expressões, oferecendo suporte a:

  • Acesso baseado em índices: Patient.name[0]

  • Filtrando com where(): Patient.name.where(use = 'official')

  • Lógica booleana: Patient.telecom.where(system = 'phone' and use = 'work')

  • Funções de subconfiguração:first(), last()

  • Verificações de existência:exists(), count()

  • Navegação polimórfica: Observation.value

Exemplos

Solicitação direta FHIRPath de patch

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 no pacote

Use um recurso de Parâmetros como recurso de entrada commethod: 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" } }] }

Cabeçalhos de solicitação

Cabeçalho Obrigatório Descrição
Content-Type Sim application/json-patch+jsonpara JSON Patch ou application/fhir+json para FHIRPath Patch
If-Match Não Atualização condicional específica da versão usando ETag

Resposta da amostra

A operação retorna o recurso atualizado com as informações da nova versão:

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" } }

Comportamento

A operação PATCH:

  • Valida a sintaxe do patch de acordo com a especificação apropriada (RFC 6902 para JSON Patch, FHIR R4 para Patch) FHIRPath

  • Aplica operações atomicamente - todas as operações são bem-sucedidas ou todas falham

  • Atualiza o ID da versão do recurso e cria uma nova entrada no histórico

  • Preserva o recurso original no histórico antes de aplicar as alterações

  • Valida as restrições de recursos do FHIR após a aplicação de patches

  • Suporta atualizações condicionais usando o cabeçalho If-Match com ETag

Tratamento de erros

A operação trata das seguintes condições de erro:

  • 400 Solicitação incorreta: sintaxe de patch inválida (solicitação não conforme ou documento de patch malformado)

  • 404 Não encontrado: recurso não encontrado (o ID especificado não existe)

  • 409 Conflito: conflito de versão (atualizações simultâneas ou ID de versão não atual fornecida)

  • 422 Entidade não processável: as operações de patch não podem ser aplicadas aos elementos de recursos especificados

Resumo dos recursos

Recurso Patch JSON FHIRPath Patch
Tipo de conteúdo application/json-patch+json application/fhir+json
Formato do caminho Ponteiro JSON (RFC 6901) FHIRPath expressões
API PATCH direta Compatível Compatível
Bundle Batch Compatível (via binário) Suportado (por meio de parâmetros)
Transação de pacote Compatível (via binário) Suportado (por meio de parâmetros)
Operações adicionar, remover, substituir, mover, copiar, testar adicionar, inserir, excluir, substituir, mover

Limitações

  • Operações PATCH condicionais usando condições de pesquisa não são suportadas

  • O patch JSON em pacotes deve usar recursos binários com conteúdo codificado em base64

  • FHIRPath O patch em pacotes deve usar recursos de parâmetros

Recursos adicionais

Para obter mais informações sobre as operações PATCH, consulte: