我正在开发一个项目,其客户端使用REST / HATEOAS来获取和修改数据 以下是类图的一部分:class diagram。
请求 / group / 12345 的hal + json HATEOAS响应如下所示:
{
"id": "12345",
"_links": {
"self": {
"href": "/group/12345"
},
"roles": {
"href": "/group/12345/roles"
}
}
}
要从该组中删除角色,我只需对特定角色执行DELETE即可。 (因为每个角色必须只在一个组中,并且不允许将角色移动到另一个组)。
所以我会添加一个链接与rel" drop"这个角色。因此,当允许DELETE请求时,客户端知道 if 或更确切地说:
{
"id": "67890",
"_links": {
"self": {
"href": "/roles/67890"
},
"users": {
"href": "/roles/67890/users"
},
"drop": {
"href": "/roles/67890"
}
}
}
因此,要删除用户,客户端会查找丢弃链接。如果未找到链接,则不允许删除。否则,它会在找到的链接上执行DELETE请求。
但是,如果我想从角色中移除用户,该怎么办?
我不能简单地删除用户。角色 - >用户关系不是聚合
如何告诉客户端是否允许从角色中删除用户?
要从角色删除用户,我将使用 DELETE / groups / 12345 / roles / 67890 / users / ABC 。要删除用户,我会使用 DELETE / users / ABC 。
那么我应该把"删除用户放在角色"链路?
提前谢谢你:)
答案 0 :(得分:1)
Links通常有三个部分
上下文标识符通常由...... umm ... context 隐含,而不是明确的。
从我可以看到,hal+json没有明确指定上下文标识符的机制,这意味着你需要依赖隐式方法。
这表明,如果您想要就角色中的用户进行沟通,那么您需要一个暗示正确标识符的上下文。
您通常会采用以下两种方式之一
例如,您的/roles/67890/users
表示可能类似于
_links: {
self: {
href: /roles/67890/users
}
}
_embedded: {
users: [ {
_links: {
self: /users/ABC
/role/remove : /groups/12345/roles/67890/users/ABC
}
} ,
... ]
}