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: