View relationships over REST
By default, information about relationships is not returned as the result of a GET request on a managed object. You must explicitly include the relationship property in the request, for example:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Accept-API-Version: resource=1.0" \ --request GET \ "http://localhost:8080/openidm/managed/user/psmith?_fields=manager" { "_id": "psmith", "_rev": "0000000014c0b68d", "manager": { "_ref": "managed/user/bjensen", "_refResourceCollection": "managed/user", "_refResourceId": "bjensen", "_refProperties": { "_id": "42418f09-ad6c-4b77-bf80-2a12d0c44678", "_rev": "00000000288b921e" } } }
To obtain more information about the referenced object (psmith’s manager, in this case), you can include additional fields from the referenced object in the query, using the syntax object/property
(for a simple string value) or object/*/property
(for an array of values).
The following example returns the email address and contact number for psmith’s manager:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Accept-API-Version: resource=1.0" \ --request GET \ "http://localhost:8080/openidm/managed/user/psmith?_fields=manager/mail,manager/telephoneNumber" { "_id": "psmith", "_rev": "0000000014c0b68d", "manager": { "_rev": "000000005bac8c10", "_id": "bjensen", "telephoneNumber": "12345678", "mail": "bjensen@example.com", "_ref": "managed/user/bjensen", "_refResourceCollection": "managed/user", "_refResourceId": "bjensen", "_refProperties": { "_id": "42418f09-ad6c-4b77-bf80-2a12d0c44678", "_rev": "00000000288b921e" } } }
To query all the relationships associated with a managed object, query the reference (*_ref
) property of that object. For example, the following query shows all the objects that are referenced by psmith’s entry:
curl \ --header "X-OpenIDM-Username: openidm-admin" \ --header "X-OpenIDM-Password: openidm-admin" \ --header "Accept-API-Version: resource=1.0" \ --request GET \ "http://localhost:8080/openidm/managed/user/psmith?_fields=*_ref" { "_id": "psmith", "_rev": "0000000014c0b68d", "reports": [], "manager": { "_ref": "managed/user/bjensen", "_refResourceCollection": "managed/user", "_refResourceId": "bjensen", "_refProperties": { "_id": "42418f09-ad6c-4b77-bf80-2a12d0c44678", "_rev": "00000000288b921e" } }, "roles": [], "_meta": { "_ref": "internal/usermeta/601a3086-8c64-4966-b33c-7a213b13d859", "_refResourceCollection": "internal/usermeta", "_refResourceId": "601a3086-8c64-4966-b33c-7a213b13d859", "_refProperties": { "_id": "9de71bd7-1e1b-462e-b565-ac0a7d2f9269", "_rev": "0000000037f79a00" } }, "authzRoles": [], "_notifications": [ { "_ref": "internal/notification/3000bb64-4619-490a-8c4b-50ae7ca6b20c", "_refResourceCollection": "internal/notification", "_refResourceId": "3000bb64-4619-490a-8c4b-50ae7ca6b20c", "_refProperties": { "_id": "f54b6f84-7d3f-4486-a7c1-676fca03eeab", "_rev": "00000000748da107" } } ] }
To expand that query to show all fields within each relationship, add a wildcard as follows:
curl \
--header "X-OpenIDM-Username: openidm-admin" \
--header "X-OpenIDM-Password: openidm-admin" \
--header "Accept-API-Version: resource=1.0" \
--request GET \
"http://localhost:8080/openidm/managed/user/psmith?_fields=*_ref/*"
Which outputs the following:
{
"_id": "psmith",
"_rev": "0000000014c0b68d",
"reports": [],
"manager": {
"_rev": "000000005bac8c10",
"_id": "bjensen",
"userName": "bjensen",
"givenName": "Babs",
"sn": "Jensen",
"telephoneNumber": "12345678",
"active": "true",
"mail": "bjensen@example.com",
"accountStatus": "active",
"effectiveAssignments": [],
"effectiveRoles": [],
"_ref": "managed/user/bjensen",
"_refResourceCollection": "managed/user",
"_refResourceId": "bjensen",
"_refProperties": {
"_id": "42418f09-ad6c-4b77-bf80-2a12d0c44678",
"_rev": "00000000288b921e"
}
},
"roles": [],
"_meta": {
"_rev": "0000000079e86d8d",
"_id": "601a3086-8c64-4966-b33c-7a213b13d859",
"createDate": "2020-07-29T08:52:20.061794Z",
"lastChanged": {
"date": "2020-07-29T11:52:16.424167Z"
},
"loginCount": 0,
"_ref": "internal/usermeta/601a3086-8c64-4966-b33c-7a213b13d859",
"_refResourceCollection": "internal/usermeta",
"_refResourceId": "601a3086-8c64-4966-b33c-7a213b13d859",
"_refProperties": {
"_id": "9de71bd7-1e1b-462e-b565-ac0a7d2f9269",
"_rev": "0000000037f79a00"
}
},
"authzRoles": [],
"_notifications": [
{
"_rev": "00000000d93a6598",
"_id": "3000bb64-4619-490a-8c4b-50ae7ca6b20c",
"notificationType": "info",
"message": "Your profile has been updated.",
"createDate": "2020-07-29T11:52:16.517200Z",
"_ref": "internal/notification/3000bb64-4619-490a-8c4b-50ae7ca6b20c",
"_refResourceCollection": "internal/notification",
"_refResourceId": "3000bb64-4619-490a-8c4b-50ae7ca6b20c",
"_refProperties": {
"_id": "f54b6f84-7d3f-4486-a7c1-676fca03eeab",
"_rev": "00000000748da107"
}
}
]
}
Metadata is implemented using the relationships mechanism so when you request all relationships for a user (with |