REST、超媒体和 HATEOAS
你一直在使用“REST”这个词。我认为它并不是你认为的意思。
— Mike Amundsen,REST fest 2012 主题演讲。
首先,免责声明。“Django REST 框架”这个名称是在 2011 年初确定的,选择这个名称只是为了确保开发人员能轻松找到该项目。在整个文档中,我们尝试使用“Web API”这个更简单、技术上更正确的术语。
如果你认真考虑设计超媒体 API,你应该查阅本文件之外的资源,以帮助了解你的设计选择。
以下内容属于“必读书目”类别。
- Roy Fielding 的论文 - 架构风格和基于网络的软件架构的设计。
- Roy Fielding 的“REST API 必须由超文本驱动”博客文章。
- Leonard Richardson 和 Mike Amundsen 的RESTful Web API。
- Mike Amundsen 的使用 HTML5 和 Node 构建超媒体 API。
- Steve Klabnik 的设计超媒体 API。
- Richardson 成熟度模型。
如需更全面的背景,请查看 Klabnik 的超媒体 API 阅读清单。
使用 REST 框架构建超媒体 API
REST 框架是一个不可知 Web API 工具包。它确实有助于指导你构建连接良好的 API,并使设计合适的媒体类型变得容易,但它并不会严格强制任何特定的设计风格。
REST 框架提供的内容。
不言而喻,REST 框架使构建超媒体 API 成为可能。它提供的可浏览 API 是基于 HTML 构建的 - Web 的超媒体语言。
REST 框架还包括 序列化 和 解析器/渲染器 组件,这些组件让构建合适的媒体类型、超链接关系(用于构建连接良好的系统)和对 内容协商 的强大支持变得十分容易。
REST 框架不提供的内容。
REST 框架不提供机器可读的超媒体格式,例如 HAL、Collection+JSON、JSON API 或 HTML 微格式(默认情况下),也不提供自动神奇地创建完全 HATEOAS 风格 API 的功能,其中包括基于超媒体的表单描述和语义标记的超链接。这样做会涉及对 API 设计做出武断的选择,而这些选择实际上应该在框架的范围之外。