Patch

Last updated 4 months ago

All examples can be run in Postman. Here's web view of these examples.

Run in Postman

For most of Operations in FHIR you manipulate a resource as a whole (create, update, delete operations). But sometimes you want to update specific data elements in a resource and do not care about the rest. In other words, you need an element/attribute level operation.

With the patch operation you can update a part of resource by sending a declarative description of operations which should be performed on an existing resource. To describe this operations in Aidbox you can use different notations (methods):

Patch Method

You can specify a patch method by the content-type header or by the _method parameter.

method

parameter

header

json-patch

json-patch

application/json-patch+json

merge-patch

merge-patch

application/merge-patch+json

If method is not specified, Aidbox will try to guess it by the following algorithm:

  • if the payload is an array — json-merge

  • else merge-patch

Operation Description

patch
Patch Operation

[base-url]/:resourceType/:id
Request
Response
Path Parameters
_method
optional
string
Can be json-patch, merge-patch (and fhir-patch in the future)
Headers
content-type
optional
string
See the content-type header in the table above
Body Parameters
optional
string
JSON or YAML representation of transformation rules in accordance with _method
200: OK
Updated resource

Example

You can exercise this tutorial using REST Console — just copy/paste queries into console!

Let's suppose we've created a Patient resource with the id pt-1

Request
Response
POST /Patient
resourceType: Patient
id: pt-1
active: true
name:
- given: ['John']
family: Doe
use: official
- given: ['Johny']
family: Doe
telecom:
- system: phone
value: '(03) 5555 6473'
use: work
rank: 1
birthDate: '1979-01-01'
id: pt-1
resourceType: Patient
name:
- use: official
given:
- John
family: Doe
- given:
- Johny
family: Doe
active: true
telecom:
- use: work
rank: 1
value: "(03) 5555 6473"
system: phone
birthDate: '1979-01-01'

You can copy/paste this request into REST Console of Aidbox.Cloud.

Merge Patch

Let's say we want to switch active flag to false and remove telecom:

Request
Response
PATCH /Patient/pt-1?_method=merge-patch
active: false
telecom: null
# response 200
id: pt-1
resourceType: Patient
name:
- use: official
given:
- John
family: Doe
- given:
- Johny
family: Doe
active: false
birthDate: '1979-01-01'

JSON Patch

With JSON patch, we can do more sophisticated transformations — change first given name, delete second name, and change the active attribute value to true:

Request
Response
PATCH /Patient/pt-1
- op: replace
path: '/name/0/given/0'
value: Nikolai
- op: remove
path: '/name/1'
- op: replace
path: '/active'
value: true
# response 200
id: pt-1
resourceType: Patient
name:
- use: official
given:
- Nikolai
family: Doe
active: true
birthDate: '1979-01-01'