NOTE: A consequence of this is that collections may be directly created but not edited
NOTE: All subresources can be created along with resources in flat style
Example: Concept : ConceptName
Model: Parent is a resource; Child is a sub-resource of Parent
- Parent contains an uneditable collection of children
- Child contains an uneditable reference to parent
- Creates are POSTs to Parent/<parent uuid>/Child
- Updates are POSTs to Parent/<parent uuid>/Child/<child uuid>
Example: Location
Model: Object is a resource
- Object contains an uneditable collection of children
- Object contains an editable reference to parent uuid.
- Hierarchical relation is created/updated with POST to object setting parent uuid (validate an object not self)
- Hierarchical relation is deleted with POST to object setting parent to null
Example: Patient : PatientAttribute : PatientAttributeType
Model: Primary is a resource; Mapping is a sub-resource of Primary; Secondary is a resource
- Parent contains a createable, uneditable collection of mappings
- Mapping contains an uneditable reference to primary
- Mapping contains a creatable, potentially editable reference to secondary (whether relationships can be updated is an open question)
- Secondary does not contain a reference to primary or mapping
- Primary resource has a special query whose parameter is a secondary uuid which returns all primaries related to the secondary; this query is identified by the name of the secondary (as there may be several such relationships)
- Mapping subresource has a special query whose parameter is a secondary uuid which returns all mappings related to the secondary
- Relationships are created by creating a mapping subresource with the proper secondary reference
- Relationships are deleted by deleting the mapping
- Mapping data is editable
NOTE: There can only be one collection of mappings or counterparty objects because of caching issues.
Example: Concept : ConceptSet : Concept
Model: Object is a resource; Mapping is a sub-resource of Object
- Object as primary contains a createable, uneditable collection of child mappings
- Mapping contains a uneditable reference to object as primary
- Mapping contains a createable, potentially editable reference to object as secondary (whether relationships can be updated is an open question)
- Object does not contain a reference to object as primary or mapping
- Primary resource has a special query whose parameter is a secondary uuid which returns all primaries related to the secondary; this query is identified by the name of the secondary (as there may be several such relationships)
- Mapping subresource has a special query whose parameter is a secondary uuid which returns all mappings related to the secondary
- Relationships are created by creating a mapping subresource with the proper object as secondary reference
- Whether relationships can be edited or merely create and deleted is an open question
- Relationships are deleted by deleting the mapping
- Mapping data is editable
NOTE: There can only be one collection of mappings or counterparty objects because of caching issues.
Example: Location : LocationTagMap : LocationTag
Model: Primary is a resource; Mapping is a sub-resource of Primary; Secondary is a resource
- Parent contains a createable, uneditable collection of mappings
- Mapping contains an uneditable reference to primary
- Mapping contains a creatable, potentially editable reference to secondary (whether relationships can be updated is an open question)
- Secondary does not contain a reference to primary or mapping
- Primary resource has a special query whose parameter is a secondary uuid which returns all primaries related to the secondary; this query is identified by the name of the secondary (as there may be several such relationships)
- Mapping subresource has a special query whose parameter is a secondary uuid which returns all mappings related to the secondary
- Relationships are created by creating a mapping subresource with the proper secondary reference
- Relationships are deleted by deleting the mapping
NOTE: The direction in which the relationship is broken is arbitrary, but there can only be one collection of mappings or counterparty objects because of caching issues.