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/*"
{ "_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" } } ] }
Note
Metadata is implemented using the relationships mechanism so when you request all relationships for a user (with _ref/
), you will also get all the metadata for that user, if metadata is being tracked. For more information, see "Track User Metadata".