我想知道 API 链接的以下结构是否与 HATEOAS 兼容?
特别是我不确定 /create endpoint。它应该在入门级,因为用户可以从那里创建一个组,还是可以将它放在 /groups 中?
你对其余的有什么看法?它也应该与 HAL 兼容。
/groups
/create
/detail/{groupId}
/update
/delete
/items
/search{?page,size,sort}
我想知道 API 链接的以下结构是否与 HATEOAS 兼容?
特别是我不确定 /create endpoint。它应该在入门级,因为用户可以从那里创建一个组,还是可以将它放在 /groups 中?
你对其余的有什么看法?它也应该与 HAL 兼容。
/groups
/create
/detail/{groupId}
/update
/delete
/items
/search{?page,size,sort}
HATEOAS(请参阅Richardson 的成熟度模型级别 3)都是关于链接的,因此使用 HAL 浏览器看起来像这样:
根:
{
"_links": {
"self": {
"href": "/api/root"
},
"api:group-add": {
"href": "http://apiname:port/api/group"
},
"api:group-search": {
"href": "http://apiname:port/api/group?pageNumber={pageNumber}&pageSize={pageSize}&sort={sort}"
},
"api:group-by-id": {
"href": "http://apiname:port/api/group/id" (OR "href": "http://apiname:port/api/group?id={id}")
}
}
}
添加只是到该端点的 POST,然后您将拥有 2 个 GET 方法。
然后,一旦您深入到特定组(例如#1):
{
"Id" : 1,
"Name" : "test",
"_links": {
"self": {
"href": "/api/group/1" (OR "/api/group?id=1")
},
"edit": {
"href": "http://apiname:port/api/group/1"
},
"api:delete": {
"href": "http://apiname:port/api/group/1"
},
"api:items-query": {
"href": "http://apiname:port/api/bonus?groupId=1"
}
}
}
在这里,编辑只是一个 PUT,然后您需要一个 DELETE(请参阅同一链接中的 REST 级别 2),至于项目,您可能最清楚它们只是一个属性还是另一个端点;您甚至可以将它们嵌入到检索组的同一个调用中。