这种API结构与HATEOAS兼容吗?

时间:2016-06-20 12:13:02

标签: api rest restful-architecture hateoas hypermedia

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

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

您对其他人的看法是什么?它也应该是HAL兼容的。

Author:
jx:area(lastCell="A3")

jx:grid(lastCell="A3" headers="headers" data="data" areas=[A2:A2, A3:A3]  
   formatCells="String:A3,Integer:B3,Long:B3,Short:B3,Double:B3,Float:B3,BigDecimal:B3")

1 个答案:

答案 0 :(得分: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级),对于这些项目,如果它们只是一个属性,你可能最清楚或其他终点;你甚至可以将它们嵌入到同一个检索组的电话中。