如何 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。
如何 RESTFul 你的服务(译)的更多相关文章
- WCF Restful Service的服务
构建基于WCF Restful Service的服务 前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添加服务端引用才能使用(虽然看到网络上已经提供了这方面 ...
- java 利用HttpURLConnection方式获取restful格式的服务数据
/** * @Author: * @Description:利用HttpURLConnection方式获取restful格式的服务数据 * @Date: */ private static List& ...
- 构建基于WCF Restful Service的服务
前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添加服务端引用才能使用(虽然看到网络上已经提供了这方面的Dynamic Proxy,但是没有这种方式简便), ...
- RESTFul Web Api 服务框架(一)
简介: 基于 REST 的 Web 服务日益成为后端企业服务集成的首选,因为它比 SOAP 更加简单.这篇文章介绍了一 个简单的可扩展框架,使用Asp.net Web Api作为 REST 服务的实现 ...
- Python Tornado搭建高并发Restful API接口服务
Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快能实现高并发.得利于其 非阻塞的方式和对epoll的运用,Torn ...
- 消费Restful的web服务(三)
构架工程 创建一个springboot工程,去消费RESTFUL的服务.这个服务是 http:///gturnquist-quoters.cfapps.io/api/random ,它会随机返回Jso ...
- [转]构建基于WCF Restful Service的服务
本文转自:http://www.cnblogs.com/scy251147/p/3566638.html 前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添 ...
- springMVC+json构建restful风格的服务
首先.要知道什么是rest服务,什么是rest服务呢? REST(英文:Representational State Transfer,简称REST)描写叙述了一个架构样式的网络系统.比方 web 应 ...
- Spring Boot教程(三)消费Restful的web服务
构架工程 创建一个springboot工程,去消费RESTFUL的服务.这个服务是 http:///gturnquist-quoters.cfapps.io/api/random ,它会随机返回Jso ...
随机推荐
- RabbitMQ 实践及使用
目录 - 1. RabbitMQ的安装 - 1.1 配置好 epel - 1.2 安装 RPM包 - 1.3 创建用户设置权限- 2. RabbitMQ组件- 3. RabbitMQ ...
- mybatis 联结查询
一.查询 员工(tbl_employee)时,关联 查询出 员工对于的部门信息 (tab1_dept),一对一查询,或者多对一查询 适用 emp bean里面 包含 部门bean dept属性对象 1 ...
- 取消myeclipse自动进入workspace
进入到C:\Program Files\MyEclipse 6.5\eclipse\configuration\.settings目录, 修改SHOW_WORKSPACE_SELECTION_DIAL ...
- 如何简单的测试kubernetes的dns add-ons是否工作正常?
1,新建一个yaml文件. apiVersion: v1 kind: Pod metadata: name: busybox namespace: default spec: containers: ...
- 用Lucene.net对数据库建立索引及搜索<转>
用Lucene.net对数据库建立索引及搜索 最近我一直在研究 Lucene.net ,发现Lucene.net对数据库方面建索引的文章在网上很少见,其实它是可以对数据库进行索引的,我闲着没事,写了个 ...
- Maven 管理的WEB项目发布到Tomcat上
1.需要Tomcat服务器 这里可以使用已下载好的Tomcat也可以使用Maven来自动引入Tomcat插件. 通过Maven引入Tomcat服务器 在项目的pom.xml文件中project 标签中 ...
- 关于matplotlib,你要的饼图在这里
Table of Contents 1 官方Demo 2 将实际数据应用于官方Demo 3 一些改善措施 3.1 重新设置字体大小 3.2 设置显示颜色,Method 1: 3.3 设置显 ...
- Flask实战第40天:图片验证码生成技术
图片验证码生成 安装pillow pip install pillow 在utils下新建python package命名为captcha 把需要需要用到的字体放在captcha下 编辑captcha ...
- C++中template的.h文件和.cpp文件的问题
在C++中,用到类模板时,如果类似一般的类声明定义一样,把类声明放在.h文件中,而具体的函数定义放在.cpp文件中的话,会发现编译器会报错.如类似下面代码: //test.h文件 #ifndef TE ...
- [Lydsy1806月赛] 最长公共子序列
首先可以证明,只由一种字符构成的串总会是最优解中的一种... 考虑随便一个T与S的LIS都至少是出现次数最少的字符个数(考虑反证法,如果要更短,那么T中每种字符的个数都至多是 S 中最少的字符个数-1 ...