【发布时间】:2015-04-22 00:25:36
【问题描述】:
在我开始从事一个正在使用它的新项目之前,我从未真正听说过HAL。据我所知,它基本上是一种轻松地跟随链接遍历宁静 API 结构的方式。
因此,如果我理解正确的话,这两个工具都是为了更容易遍历 API 的文档,以查看与所述 API 进行通信的所有不同方式。本质上,这两者都是仅用于文档目的的工具?
【问题讨论】:
标签: django rest asp.net-web-api django-rest-framework
在我开始从事一个正在使用它的新项目之前,我从未真正听说过HAL。据我所知,它基本上是一种轻松地跟随链接遍历宁静 API 结构的方式。
因此,如果我理解正确的话,这两个工具都是为了更容易遍历 API 的文档,以查看与所述 API 进行通信的所有不同方式。本质上,这两者都是仅用于文档目的的工具?
【问题讨论】:
标签: django rest asp.net-web-api django-rest-framework
REST API 必须是超文本驱动的。它不仅用于文档目的,还用于驱动与 API 的所有交互。如果您不通过链接驱动交互,并且客户端正在从文档中的模板构建 URI,那么它不是 RESTful。 Django-REST-Framework 的作者自己也意识到这个名字是不够的。
http://www.django-rest-framework.org/topics/rest-hypermedia-hateoas/
您应该阅读该文档中提供的链接,尤其是这个:
http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
考虑到这一点,您的 REST API 必须使用链接标准化的数据格式,以便客户端知道如何解析它们。这将限制大多数 API 使用 HTML 或 XML,但由于 JSON 是一种如此流行的数据交换格式,因此在设计约定以向任何格式(如 HAL)添加超媒体感知方面付出了一些努力。
Django-REST-Framework 支持 HTML 输出中的超链接,但是 -- AFAIK -- 它不支持其他格式的超链接。如果需要,您可以使用 HAL-JSON,但您必须实现对它的支持。
【讨论】: