以 HATEOAS 方式从集合中删除项目
Removing an item from a collection in a HATEOAS way
我正在做一个项目,其客户使用 REST/HATEOAS 来获取和修改数据。
这是 class 图的一部分:class diagram.
A hal+json 请求的 HATEOAS 响应 /group/12345 看起来像:
{
"id": "12345",
"_links": {
"self": {
"href": "/group/12345"
},
"roles": {
"href": "/group/12345/roles"
}
}
}
要从此组中删除角色,我可以简单地对特定角色执行 DELETE。 (因为每个角色都必须属于一个组,并且不允许将角色移动到另一个组)。
所以我会在角色中添加一个 link 和 rel "drop"。因此,客户端知道 if 或者 when 允许删除请求:
{
"id": "67890",
"_links": {
"self": {
"href": "/roles/67890"
},
"users": {
"href": "/roles/67890/users"
},
"drop": {
"href": "/roles/67890"
}
}
}
因此,要删除用户,客户端会查找删除 link。如果没有找到link,则不允许删除。否则,它将对找到的 link 执行 DELETE 请求。
但是如果我想从一个角色中删除一个用户,我应该怎么做呢?
我不能简单地删除用户。角色-> 用户关系不是聚合。
如果允许从角色中删除用户,我如何告诉客户?
要从角色中删除 用户,我会使用DELETE /groups/12345/roles/67890/users/ABC。要 delete 用户,我会使用 DELETE /users/ABC.
所以我应该把 "remove user from role" link 放在哪里?
提前谢谢你:)
Links通常有三部分
- 上下文标识符
- 一个link关系类型
- 目标标识符
上下文标识符通常由...嗯...上下文隐含,而不是显式显示。
据我所知,hal+json 没有明确指定上下文标识符的机制,这意味着您需要依赖隐式方法。
这表明,如果您想就从角色中删除用户进行交流,那么您需要一个隐含正确标识符的上下文。
您通常会通过以下两种方式之一进行此操作
- 有一个 link 链,指向该角色中的用户表示,并在 [=46 的列表中包含删除角色 link 关系=]s
- 嵌入用户在其他一些表示中的表示,并在该嵌入资源中包含放置角色link。
例如,您的 /roles/67890/users
可能类似于
_links: {
self: {
href: /roles/67890/users
}
}
_embedded: {
users: [ {
_links: {
self: /users/ABC
/role/remove : /groups/12345/roles/67890/users/ABC
}
} ,
... ]
}
我正在做一个项目,其客户使用 REST/HATEOAS 来获取和修改数据。
这是 class 图的一部分:class diagram.
A hal+json 请求的 HATEOAS 响应 /group/12345 看起来像:
{
"id": "12345",
"_links": {
"self": {
"href": "/group/12345"
},
"roles": {
"href": "/group/12345/roles"
}
}
}
要从此组中删除角色,我可以简单地对特定角色执行 DELETE。 (因为每个角色都必须属于一个组,并且不允许将角色移动到另一个组)。
所以我会在角色中添加一个 link 和 rel "drop"。因此,客户端知道 if 或者 when 允许删除请求:
{
"id": "67890",
"_links": {
"self": {
"href": "/roles/67890"
},
"users": {
"href": "/roles/67890/users"
},
"drop": {
"href": "/roles/67890"
}
}
}
因此,要删除用户,客户端会查找删除 link。如果没有找到link,则不允许删除。否则,它将对找到的 link 执行 DELETE 请求。
但是如果我想从一个角色中删除一个用户,我应该怎么做呢?
我不能简单地删除用户。角色-> 用户关系不是聚合。
如果允许从角色中删除用户,我如何告诉客户?
要从角色中删除 用户,我会使用DELETE /groups/12345/roles/67890/users/ABC。要 delete 用户,我会使用 DELETE /users/ABC.
所以我应该把 "remove user from role" link 放在哪里?
提前谢谢你:)
Links通常有三部分
- 上下文标识符
- 一个link关系类型
- 目标标识符
上下文标识符通常由...嗯...上下文隐含,而不是显式显示。
据我所知,hal+json 没有明确指定上下文标识符的机制,这意味着您需要依赖隐式方法。
这表明,如果您想就从角色中删除用户进行交流,那么您需要一个隐含正确标识符的上下文。
您通常会通过以下两种方式之一进行此操作
- 有一个 link 链,指向该角色中的用户表示,并在 [=46 的列表中包含删除角色 link 关系=]s
- 嵌入用户在其他一些表示中的表示,并在该嵌入资源中包含放置角色link。
例如,您的 /roles/67890/users
可能类似于
_links: {
self: {
href: /roles/67890/users
}
}
_embedded: {
users: [ {
_links: {
self: /users/ABC
/role/remove : /groups/12345/roles/67890/users/ABC
}
} ,
... ]
}