这个 API 结构 HATEOAS 兼容吗?

Is this API structure HATEOAS compatible?

我想知道 API 链接的以下结构是否与 HATEOAS 兼容?

特别是我不确定/create endpoint。它应该在入门级别,因为用户可以从那里创建一个组,还是可以将它放在 /groups 中?

你对剩下的有什么看法?它也应该与 HAL 兼容。

/groups
  /create
  /detail/{groupId}
    /update
    /delete
    /items
  /search{?page,size,sort}

HATEOAS(参见 Richardson's Maturity Model level 3)是关于 links 的,因此使用 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}")
    }
  }
}

add 只是到该端点的 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(请参阅同一 link 中 REST 的第 2 级),至于这些项目,您可能最了解它们只是一个 属性,或另一个端点;您甚至可以将它们嵌入到检索组的同一个调用中返回。