如何 RESTFul 你的服务(译)

原文:http://reynders.co/how-restful-is-your-service/
发表于:2013年9月

如今无论是社交媒体平台还是企业解决方案,Web services都不出不在。为了可以跨平台使用,如何“暴露”你的APIs就显得非常重要。当前,很多APIs表面上声称是RESTful,但实际上它们是改进过后的RPC。

许多声称实现了REST风格的服务甚至不知道这个词是什么意思,因此我来解释一下什么是REST,并且告诉你如何RESTful你的服务。

REST and RESTful

Roy Fielding 的定义, Representational State Transfer(REST) 是分布式系统的一种软件架构风格。例如Web,它依赖于一个无状态(stateless),客户端-服务器(client-server),可缓存的(cache-able)通信协议,比如HTTP。  

/this/does/not/mean/restful, { "neither":"does this" }  

拥有清晰流畅的路由并且返回JSON数据并不意味你的服务已经RESTful。只有当采用REST风格并且遵循某些规则时才是真正的RESTful服务。 

Fielding指出RESTful所需的6个约束,其中至少5个需被重视: 

1. 客户端-服务器约束(Client-Server constraint) 

使用统一接口隔离客户端与服务器。客户端不必关心业务逻辑和数据存储,同样的,服务器不必考虑用户界面。

2. 无状态约束(Stateless constraint)  

每次请求都包含服务器所需的所有信息,服务器没有存储状态信息。  

3. 可缓存约束(Cache-able constraint) 

服务器响应必须能够显式或隐式定义自己是可缓存的(cache-able),允许客户端复用响应,减少与服务器之间的频繁调用,以此来提升性能。  

4. 分层系统约束(Layered System constraint) 

客户端无需考虑中介组件,如负载平衡和代理,提高系统的可伸缩性。  

5. 统一接口约束(Uniform Interface constraint)  

客户端与服务器之间使用统一的基于HTTP协议的URI来定位资源。如前所述,每个信息都包含足够服务器完成后续处理的信息,既 HATEOAS(Hypermedia As The Engine Of Application State)。  

6. 按需代码约束(Code On Demand constraint)  

可选约束。在服务器返回信息之前,客户端无需知道如何处理这些信息。通常用于向已完成部署的系统中添加功能。  

RESTful Web APIs  

实现REST的Web应用程序接口和基于HTTP实现RESTful的Web APIs包含以下特性:  

  • 基本URI,例如:http://api.mysystem.com
  • 支持互联网媒体类型,如:JSON
  • 使用HTTP动词(HTTP verbs: GET, POST, PUT, DELETE)完成操作
  • 超文本驱动(Hypertext driven)

RESTful Web API 必须易于使用并且提供完整的帮助文档。  

"If you have to ship an SDK for your RESTful API, it is not a RESTful API" - source  

ASP.NET开发团队提供了一个基于REST原则构建Web API的开发框架,叫做 ASP.NET Web API,点击获得扩展阅读。  

小记 

前述“约束”并不是一个标准,但不失为构建RESTful风格Web应用的最佳指引。  

目前真正实现RESTful思想的应用屈指可数,大部分还是基于HTTP协议改进的RPC。下次你在研究一个新的API时,可以体会一下是否是真正的RESTful。 

原文地址:https://www.cnblogs.com/lookerblue/p/7170784.html