Patch
Examples in this documentation depend on features activated in the The code samples demonstrate how to contact the server over HTTPS using the deployment CA certificate. Before trying the samples, generate the CA certificate in PEM format from the server deployment ID and password:
|
The patch operation updates one or more fields of a resource. Use it when you must make fine-grained changes to a resource; for example:
-
Add a member to a static group.
-
Remove a member from a static group.
-
Add or remove a single mail address or telephone number.
If you intend only to replace fields' values, update the resource instead with HTTP PUT and a partial resource including just the fields to replace.
Add a member to a group
The following example adds Babs to a static group:
$ curl \
--request PATCH \
--cacert ca-cert.pem \
--user dc=com/dc=example/ou=People/uid=kvaughan:bribery \
--header 'Content-Type: application/json' \
--data '[{
"operation": "add",
"field": "uniqueMember",
"value": "dc=com/dc=example/ou=People/uid=bjensen"
}]' \
'https://localhost:8443/hdap/dc=com/dc=example/ou=Groups/cn=Directory%20Administrators?_prettyPrint=true'
{
"_id" : "dc=com/dc=example/ou=Groups/cn=Directory%20Administrators",
"objectClass" : [ "groupofuniquenames", "top" ],
"cn" : [ "Directory Administrators" ],
"ou" : [ "Groups" ],
"uniqueMember" : [ "dc=com/dc=example/ou=People/uid=kvaughan", "dc=com/dc=example/ou=People/uid=rdaugherty", "dc=com/dc=example/ou=People/uid=hmiller", "dc=com/dc=example/ou=People/uid=bjensen" ]
}
Remove a member from a group
The following example removes Babs from the group:
$ curl \
--request PATCH \
--cacert ca-cert.pem \
--user dc=com/dc=example/ou=People/uid=kvaughan:bribery \
--header 'Content-Type: application/json' \
--data '[{
"operation": "remove",
"field": "uniqueMember",
"value": "dc=com/dc=example/ou=People/uid=bjensen"
}]' \
'https://localhost:8443/hdap/dc=com/dc=example/ou=Groups/cn=Directory%20Administrators?_prettyPrint=true'
{
"_id" : "dc=com/dc=example/ou=Groups/cn=Directory%20Administrators",
"objectClass" : [ "groupofuniquenames", "top" ],
"cn" : [ "Directory Administrators" ],
"ou" : [ "Groups" ],
"uniqueMember" : [ "dc=com/dc=example/ou=People/uid=kvaughan", "dc=com/dc=example/ou=People/uid=rdaugherty", "dc=com/dc=example/ou=People/uid=hmiller" ]
}
Add multiple values
To change multiple fields, include multiple operation objects in the patch payload:
$ curl \
--request PATCH \
--cacert ca-cert.pem \
--user dc=com/dc=example/ou=People/uid=kvaughan:bribery \
--header 'Content-Type: application/json' \
--data '[{
"operation": "add",
"field": "telephoneNumber",
"value": "+1 408 555 9999"
}, {
"operation": "add",
"field": "mail",
"value": "barbara.jensen@example.com"
}]' \
'https://localhost:8443/hdap/dc=com/dc=example/ou=People/uid=bjensen?_fields=mail,telephoneNumber&_prettyPrint=true'
{
"_id" : "dc=com/dc=example/ou=People/uid=bjensen",
"telephoneNumber" : [ "+1 408 555 1862", "+1 408 555 9999" ],
"mail" : [ "bjensen@example.com", "barbara.jensen@example.com" ]
}
For a multivalued attribute, the value
field takes an array.
whereas the value
field takes a single value for a single-valued field.
For single-valued fields, an add
operation has the same effect as a replace
operation.
Patch a specific revision
Use an If-Match: <revision>
header to patch only a specific revision of a resource:
$ export REVISION=$(cut -d \" -f 8 <(curl \
--get \
--cacert ca-cert.pem \
--user dc=com/dc=example/ou=People/uid=kvaughan:bribery \
--header 'Content-Type: application/json' \
--data '_fields=_rev' \
--silent \
'https://localhost:8443/hdap/dc=com/dc=example/ou=People/uid=bjensen'))
$ curl \
--user dc=com/dc=example/ou=People/uid=kvaughan:bribery \
--request PATCH \
--cacert ca-cert.pem \
--header "If-Match: $REVISION" \
--header 'Content-Type: application/json' \
--data '[{
"operation": "remove",
"field": "telephoneNumber",
"value": "+1 408 555 9999"
}, {
"operation": "remove",
"field": "mail",
"value": "barbara.jensen@example.com"
}]' \
'https://localhost:8443/hdap/dc=com/dc=example/ou=People/uid=bjensen?_fields=mail,telephoneNumber&_prettyPrint=true'
{
"_id" : "dc=com/dc=example/ou=People/uid=bjensen",
"telephoneNumber" : [ "+1 408 555 1862" ],
"mail" : [ "bjensen@example.com" ]
}
The resource revision changes when the patch is successful.