restful API设计思想

       Web API已经在最近几年变成重要的话题,一个干净的API设计对于后端系统是非常重要的。通常我们为Web API使用RESTful设计,REST概念分离了API结构和逻辑资源,通过Http方法GET, DELETE, POST 和 PUT来操作资源。它是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。RESTful的关键是定义可表示流程元素/资源的对象。在REST中,每一个对象都是通过URL来表示的,对象用户负责将状态信息打包进每一条消息内,以便对象的处理总是无状态的。

.原则条件

REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful

Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。

在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GETPUTPOST DELETEHypermedia 是应用程序状态的引擎,资源表示通过超链接互联。

.分层模式

另一个重要的 REST 原则是分层系统,这表示组件无法了解它与之交互的中间层以外的组件。通过将系统知识限制在单个层,可以限制整个系统的复杂性,促进了底层的独立性。

当 REST 架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST 简化了客户端和服务器的实现。

  以下介绍restful风格的具体特征:

1.采用URI标识资源

SOAP Web API采用RPC风格,它采用面向功能的架构,所以我们在设计SOAP Web API的时候首相考虑的是应高提供怎样的功能(或者操作)。RESTful Web API采用面向资源的架构,所以在设计之初首先需要考虑的是有哪些资源可供操作。

资源是一个很宽泛的概念,任何寄宿于Web可供操作的事物均可视为资源。资源可以体现为经过持久化处理保存到磁盘上的某个文件或者数据库中某个表的某条记录,也可以是Web应用接受到请求后采用某种算法计算得出的结果。资源可以体现为一个具体的物理对象,它也可以是一个抽象的流程。

一个资源必须具有一个或者多个标识,既然我们设计的Web API,那么很自然地应该采用URI来作为资源的标识。作为资源标识的URI最好具有可读性,因为具有可读性的URI更容易被使用,使用者一看就知道被标识的是何种资源,比如如下一些URI就具有很好的可读性。

· http://www.artech.com/employees/c001(编号C001的员工)

· http://www.artech.com/sales/2013/12/3120131231日的销售额)

· http://www.artech.com/orders/2013/q42013年第4季度签订的订单)

除了必要的标志性和可选的可读性之外,标识资源的URI应该具有可寻址性(Addressability。也就是说,URI不仅仅指明了被标识资源所在的位置,而且通过这个URI可以直接获取目标资源。通过前面的介绍 我们知道URI具有URLURN两种主要的表现形式,只要前者具有可寻址性,所以我们最好采用一个URL作为资源的标识。

URI除了可以标识某个独立的资源外(比如“http://www.artech.com/employees/c001”),还可以标识一组资源的集合或者资源的容器(比如“http://www.artech.com/orders/2013/q4”)。当然,一组同类资源的集合或者存放一组同类资源的容器本身也可以视为另一种类型的复合型(Composite)资源,所以“URI总是标识某个资源这种说法是没有问题的。

2.使用链接关联相关的资源

在绝大多数情况下,资源并不会孤立地存在,必然与其它资源具有某种关联。既然我们推荐资源采用具有可寻址性的URL来标识,那么我们就可以利用它来将相关的资源关联起来。比如我们采用XML来表示一部电影的信息,那么我们采用如下的形式利用URL将相关的资源(导演、领衔主演、主演、编剧以及海报)关联在一起。实际上这可以视为一份超文本/超媒体文档。当用户得到这样一份文档的时候,可以利用自身的内容获得某部影片基本的信息,还可以利用相关的链接得到其它相关内容的详细信息。

   1: <movie>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值