假设我有以下两个根资源:
.../organizations
.../persons
GET on … / organizations / id返回有关特定组织的所有信息,例如名称,位置等.
GET on … / persons / id返回有关特定人的所有信息,例如姓名,年龄,性别等.
模拟组织中人员的成员资格(用于检索和创建)的首选RESTful方法是什么?我不仅要为成员资格本身建模,还要添加额外的属性,例如加入组织的人员日期,他/她在组织中的角色,……
一些想法:
>如果我们提供… / organizations / id / persons / id,GET应该返回什么?只有会员资料(加入数据,角色……)和指向… / persons / id的链接? REST API用户可以使用该链接来获取有关此人的所有信息.
>我们是否有可能POST到… /人创建一个人,另一个/单独POST到… /组织/ id /人创建会员?
>进一步说,让我们说一个人必须始终是至少一个组织的成员.在这种情况下,我们需要一个POST来同时原子地创建人员和成员资格.
我们如何建模?最好,我想保留根资源… /组织和… /项目.在…… / organizations / id / persons上创建一个人是没有意义的,在… / persons /上创建成员资格也没有意义.
最佳答案 不会使用
HAL及其简单的格式满足您的需求吗?
假设我们为人员,组织和会员制定了资源
我们正在尝试检索与“42”标识的人有关的信息.
请求:
GET /persons/42 HTTP/1.1
Accept: application/hal+json
响应:
HTTP1.1 200 OK
Content-Type: application/hal+json
{
"id": 42,
"name": "Smith",
"firstName": "John",
"organization": {
"id": 1234,
"name": "blah",
"href": "http://myserver/organizations/1234"
},
"membership": {
"id": 5678,
"name": "blih",
"href": "http://myserver/memberships/5678"
},
"_links": {
"self" : {
"href" : "http://myserver/persons/42"
}
}
}
人员资源是指通过“组织”的上级组织
关系.该关系使您可以轻松导航到相应的组织
资源通过相应的href链接.
以相同的方式,成员关系允许访问相应的
会员资料(再次通过“href”链接),如果您考虑会员资格
将一个人与一个组织联系起来.
请求:
GET /memberships/5678 HTTP/1.1
Accept: application/hal+json
响应:
HTTP1.1 200 OK
Content-Type: application/hal+json
{
"id": 5678,
"name": "blih",
"person": {
"id": 42,
"href": "http://myserver/persons/42"
},
"organization": {
"id": 1234,
"href": "http://myserver/organizations/1234"
},
"_links": {
"self": {
"href": "http://myserver/memberships/5678"
}
}
}
请注意,我并不是说上面的模型是适合您的模型
需求(例如,一个人可能属于多个组织,然后您需要序列化中的数组).
我的观点是,使用HAL可能会帮助您模拟您想要的内容.