【问题标题】:I don't understand the difference between Django-Rest-Framework's built-in Hyperlink's and vs. HAL我不明白 Django-Rest-Framework 内置超链接和与 HAL 之间的区别
【发布时间】:2015-04-22 00:25:36
【问题描述】:

在我开始从事一个正在使用它的新项目之前,我从未真正听说过HAL。据我所知,它基本上是一种轻松地跟随链接遍历宁静 API 结构的方式。

因此,如果我理解正确的话,这两个工具都是为了更容易遍历 API 的文档,以查看与所述 API 进行通信的所有不同方式。本质上,这两者都是仅用于文档目的的工具?

【问题讨论】:

    标签: django rest asp.net-web-api django-rest-framework


    【解决方案1】:

    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,但您必须实现对它的支持。

    【讨论】:

    • 确实是一个很好的解释。 @Pedro Werneck:请问如果客户从文档中的模板构建 URI,你怎么称呼它? Web API 是个好名字吗?
    • @nik_m Web 暗示超链接。大多数时候,我称它们为 HTTP API。如果我想成为被动攻击型,我将它们称为 street-REST API(您在街头学习的 REST),或者在链接的博客文章中解释 Roy Fielding,X 级 API(过度耦合)。
    猜你喜欢
    • 2016-06-26
    • 2020-07-23
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    相关资源
    最近更新 更多