HAL

HAL 全称 Hypertext Application Language(超文本应用语言),是一种 HATEOAS 的实现方式。

与普通 RESTful 不同,对于每一个资源 HAL 又将其细分成状态(State)、链接(Links)和子资源(Embedded Resource)三个标准部分

image.png

Note

这里的资源状态是指资源本身固有的属性,链接定义了与当前资源相关的一组资源的链接集合,而子资源则描述当前资源的具体内容,提供嵌套资源的定义。

HAL+JSON 风格请求和响应示例代码:

//请求
GET  http://api.example.com/users/**
//响应
Content-Type: application/json
{
    _links: {
        self: {
        href: "/users/**"
        }
    }
    "id": "user1",
    "name": "**",
    "email": "**@email.com"
}

相较于传统 RESTful 这里多了 _links 属性,其中有一个 self.href 链接指向当前 user 资源。

Note

HAL 的出现主要弥补了普通 JSON 格式在 API 的交互不足,让 JSON 更具有自描述性和导航性。