【问题标题】:Is this API structure HATEOAS compatible?这个 API 结构 HATEOAS 兼容吗?
【发布时间】:2016-10-21 16:44:05
【问题描述】:

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

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

您对其余部分有何看法?它也应该与 HAL 兼容。

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

【问题讨论】:

  • 为什么要将操作(createdetailupdatedeletesearch)放入 URI?那是 RPC,而不是 REST。
  • 我意识到应该只是 POST /groups - 创建组 PUT /detail/{groupID} - 更新组 DELETE /detail/{groupID} - 删除组
  • 是的,这样会更好。
  • 但是 URI 不能改变。然后 HTTP 动词可以改变。
  • 否,因为要使用和指定的 HTTP 动词会有所不同。

标签: api rest restful-architecture hateoas hypermedia


【解决方案1】:

HATEOAS(请参阅Richardson's Maturity Model level 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),至于项目,您可能最清楚它们是否只是一个属性,或者另一个端点;您甚至可以将它们嵌入到检索组的同一个调用中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2012-01-31
    • 2020-01-10
    • 1970-01-01
    • 2015-01-05
    • 2023-02-12
    • 1970-01-01
    相关资源
    最近更新 更多