文档开发者中心
我的

RESTful 架构基础(下篇)

第一组响应码表明客户端的请求格式正确且处理成功。具体操作如下表所示:


表1 成功的客户端请求


表2 — 客户端重定向请求


表3中的响应代码表示客户端请求无效,如果条件不发生变化,重新请求仍无法处理。这些故障可能有请求格式错误、未授权的请求、请求的资源不存在等。


表3 客户端请求错误


最后,表4中的响应代码表示服务器暂时无法处理客户端请求(可能仍然无效)。客户端应当在将来的某个时候重新请求。


表4 服务器处理请求错误


服务根据其自身功能要求具有不同程度的可扩展性。


注意: 试试响应代码418,它会返回简洁有力的回复:'我是一个茶壶。'


5.1 REST 资源


5.1.1 论文


Fielding 博士的论文《架构的风格与基于网络的软件架构设计》是对 RESTful 思想的主要介绍:http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm


5.1.2 RFC 规范


REST 常见用法的技术规范由**国际互联网工程任务组(IETF)定义,按照请求评议(RFC)**流程完善。规范由数字定义,并随着时间推移不时更新版本,以替换已经过时的文件。目前,这里有最新的相关 RFC 文件。


5.1.2.1 URI


RFC 3986定义了 URI 命名方案的通用语法。URI 是一种命名方案,包含了对其他如网址、支持名字子空间等编码方案。网址:http://www.ietf.org/rfc/rfc3986.txt>


5.1.2.2 URL


Url 是 URI 的一种形式,其中嵌入了充足的信息(通常是访问方案和地址),用于解析和定位资源统一资源定位符。网址:http://www.ietf.org/rfc/rfc1738.txt


5.1.2.3 IRI

国际化资源标识符(IRI)在概念上是一个用 Unicode 编码的 URI,用于在 Web 上使用的标识符中支持世界上各种语言的字符。IETF 选择创建一个新的标准,而不是改变 URI 方案本身,以避免破坏现有的系统并明确区分这两种方法。那些支持 IRI 的人故意这样做。还定义了在 IRI 和 URI 之间进行转换的映射方案。网址<:http://www.ietf.org/rfc/rfc3987.txt


5.1.2.4 HTTP


HTTP 1.1版本定义了一个应用程序协议,用于操作通常以超媒体格式表示的信息资源。虽然它是一个应用级协议,但通常不与应用程序绑定,由此产生了重要的体系结构优势。大多数人认为 HTTP 和超文本标记语言文(HTML)就是“Web”,但是 HTTP 在非面向文档的系统开发中也很有用。网址:http://www.ietf.org/rfc/rfc2616.txt


5.1.2.5 PATCH 格式


JavaScript 对象表示法(JSON)Patch 网址:https://www.ietf.org/rfc/rfc6902.txt
XML Patch 网址:https://www.ietf.org/rfc/rfc7351.txt


5.2 描述语言


人们对使用各种语言来描述 API 非常感兴趣,通过描述语言可以更容易地编写客户端和服务器文档,甚至生成骨架代码。一些比较流行、有趣的描述语言包括:


5.2.1 RAML


RAML 是一种 YAML/JSON 语言,可以定义2级成熟度的 API。它支持可重用模式和特性,通过模式和特性实现功能 API 设计的标准化。网址:http://raml.org


5.2.2 Swagger


Swagger 是另一种 YAML/JSON 语言,支持定义2级成熟度的 API。它包含代码生成器、编辑器、 API 文档可视化功能,能够与其他服务集成的。网址:http://swagger.io


5.2.3 Apiary.io


Apiary.io 是一个协作式的托管站点。它支持 Markdown 格式的 API 文档,可以围绕设计过程进行社交,并且支持模拟数据的托管实现,以便于在 API 实现之前对其进行测试。网址:http://apiary.io


5.2.4 Hydra-Cg


Hydra-Cg 是一种超媒体描述语言,通过像 JSON-LD 这样的标准方便地实现数据关联和并其它数据源的交互。网址:http://www.hydra-cg.com


5.3 实现


有一些用于构建、生成和使用 RESTful 系统的库和框架。虽然任何 Web 服务器都可以配置成提供 REST API,但有了这些框架、库和环境可以让过程变得更容易。


以下概述了一些主流的环境:

5.3.1 JAX-RS


JAX-RS 规范为 JEE 环境增加了对 REST 的支持。网址:https://jax-rs-spec.java.net


5.3.2 Restlet


Restlet API 是构建用于生产和消费 RESTful 系统的 Java API 先行者之一。它专注于为客户端和服务器生成一些非常干净、强大的 API。


Restlet Studio 是一个免费工具,能够在 RAML 和基于 swagger 的 API 描述之间进行转换,支持 Restlet、 Node 和 JAX-RS 服务器和客户端的骨架和 Stub 代码。网址:http://restlet.org


5.3.3 NetKernel


Netkernel 是一个比较有趣的 RESTful 系统。它基于微内核,是支持各种架构风格环境的代表。Netkernel 受益于在软件体系结构中采用 Web 的经济属性。你可以把它想象成“在内部引入 REST”。虽然任何基于 REST 的系统在外面看起来都一样,但在运行环境内部 NetKernel 看起来也一样。网址:http://netkernel.org


5.3.4 Play


两个主要的 Scala REST 框架之一。网址:https://www.playframework.com


5.3.5 Spray


两个主要的 Scala REST 框架之一。它设计成配合 Akka actor 模型一起工作。网址:http://spray.io


5.3.6 Express


两个主要的 Node.js REST 框架之一。网址:http://expressjs.com


5.3.7 hapi


两个主要的 Node.js REST 框架之一。网址:http://hapijs.com


5.3.8 Sinatra


Sinatra 是一个领域特定语言(DSL),用来在 Ruby 中创建 RESTful 应用程序。网址:http://www.sinatrarb.com


5.4 客户端


通过浏览器调用 REST API 是可行的,但是还有其它客户端可用于测试和构建面向资源的系统。


5.4.1 curl


curl 是流行的库和命令行工具之一,支持在各种资源上调用各种协议。网址:https://curl.haxx.se


5.4.2 httpie


httpie 是一个非常灵活和易用的客户端,支持通过 HTTP 与资源进行交互。网址:https://httpie.org


5.4.3 Postman


健全的 API 测试需要能够捕获和重播请求,支持各种身份验证和授权方案等功能。以前的命令行工具允许这样做,但 Postman 是一个较新的桌面应用程序,让这些工作对于开发团队来说变得更容易。网址:https://www.getpostman.com


6. 书籍


  • “RESTful Web APIs”:Leonard Richardson、Mike Amundsen 和 Sam Ruby,2013,O’Reilly 出版社

  • “RESTful Web Services Cookbook”:Subbu Allamaraju,2010,O’Reilly 出版社

  • “REST in Practice”:Jim Webber、Savas Parastatidis 和 Ian Robinson,2010,O’Reilly 出版社。中文版《REST实战(中文版)》

  • “Restlet in Action” by Jerome Louvel and Thierry Boileau,2011,Manning 出版社

  • “Resource-Oriented Architecture Patterns for Webs of Data (Synthesis Lectures on the Semantic Web: Theory and Technology)”:Brian Sletten,2013,Morgan & Claypool


作者 | 唐尤华

来源 | https://dzone.com/refcardz/rest-foundations-restful

点赞
收藏
回复
分享
举报
浏览230 编辑于2019-11-27 23:36未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

目录 收起
6. 书籍
了解社区公约,与您携手共创和谐专业的开发者社区。