HAL+JSON 超媒体类型不是 REST 的媒体类型?
HAL+JSON hypermedia type not a media type for REST?
能否以创建 RESTful 服务的方式使用 HAL+JSON 超媒体类型?
根据我的阅读,RESTful API 的客户端不需要用特殊情况处理不同的资源。媒体类型应该改为用来描述资源的预期外观。
HAL spec给出了这个例子:
GET /orders
{
...
"shippedToday": 20,
...
}
```
作为这个样本HAL+JSON-serving API的客户端,我似乎需要知道一个"order"有一个shippedToday
的属性。这似乎违背了客户端不需要理解表示语法的约束。
这不是对 HAL 的批评。问题是帮助我(和其他人)理解 RESTful API 设计。
Can the HAL+JSON hypermedia type be used in a way that creates a RESTful service?
是的,绝对是。
API 应该有一个广告牌 URL,在您的情况下可能是 /
。
这是人类甚至机器都可以开始发现您的 API 的入口点。
根据 HAL specification,资源表示包含一个名为 "_links"
的可选 属性,在此处进行了描述:
It is an object whose property names are link relation types (as
defined by RFC5988) and values are either a Link Object or an array
of Link Objects.
所以这些链接代表了您 API 的超媒体部分。关系可以是 IANA 注册关系,也可以使用自己的扩展关系。
关系不能含糊。他们的名字应该是唯一的。这就是为什么建议使用您自己域中的 URI 作为您自己的关系的名称的原因。这些 URI 标识代表关系的资源并包含 API 文档,即您的关系的人类或机器可读文档。
在您的情况下,这将是描述到 /orders
资源的状态转换的关系。这还应包括对响应的描述和解释,并因此记录下来,例如/orders
资源表示一个订单列表,并且有一个名为“shippedToday”的 属性,其值类型为数字。
以下是 GET / HTTP/1.1
请求的示例响应:
HTTP/1.1 200 OK
Content-Type: application/hal+json
{
"_links": {
"self": { "href": "/" },
"http://yourdomain.com/docs/rels/orders": { "href": "/orders" },
}
}
http://yourdomain.com/docs/rels/orders
下应该有 API 文档。
能否以创建 RESTful 服务的方式使用 HAL+JSON 超媒体类型?
根据我的阅读,RESTful API 的客户端不需要用特殊情况处理不同的资源。媒体类型应该改为用来描述资源的预期外观。
HAL spec给出了这个例子:
GET /orders
{
...
"shippedToday": 20,
...
}
```
作为这个样本HAL+JSON-serving API的客户端,我似乎需要知道一个"order"有一个shippedToday
的属性。这似乎违背了客户端不需要理解表示语法的约束。
这不是对 HAL 的批评。问题是帮助我(和其他人)理解 RESTful API 设计。
Can the HAL+JSON hypermedia type be used in a way that creates a RESTful service?
是的,绝对是。
API 应该有一个广告牌 URL,在您的情况下可能是 /
。
这是人类甚至机器都可以开始发现您的 API 的入口点。
根据 HAL specification,资源表示包含一个名为 "_links"
的可选 属性,在此处进行了描述:
It is an object whose property names are link relation types (as defined by RFC5988) and values are either a Link Object or an array of Link Objects.
所以这些链接代表了您 API 的超媒体部分。关系可以是 IANA 注册关系,也可以使用自己的扩展关系。
关系不能含糊。他们的名字应该是唯一的。这就是为什么建议使用您自己域中的 URI 作为您自己的关系的名称的原因。这些 URI 标识代表关系的资源并包含 API 文档,即您的关系的人类或机器可读文档。
在您的情况下,这将是描述到 /orders
资源的状态转换的关系。这还应包括对响应的描述和解释,并因此记录下来,例如/orders
资源表示一个订单列表,并且有一个名为“shippedToday”的 属性,其值类型为数字。
以下是 GET / HTTP/1.1
请求的示例响应:
HTTP/1.1 200 OK
Content-Type: application/hal+json
{
"_links": {
"self": { "href": "/" },
"http://yourdomain.com/docs/rels/orders": { "href": "/orders" },
}
}
http://yourdomain.com/docs/rels/orders
下应该有 API 文档。