概述
Restful是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
什么是Restful
Restful这个名称应该很多人都不陌生,但是我发现不少人对Restful存在或多或少的理解偏差。为了更好的理解什么是Restful架构风格,我建议先看看阮一峰老师的《理解RESTful架构》
Restful的关键是抽取资源,使用URL与资源进行对应。这边也是多数人理解有偏差之处,即Restful应该理解为面向资源的架构风格,URL的设计应该是从资源的角度出发,而不应有任何的“动作”设计,其中单个资源共享同一个接口,而不同的“动作”通过请求的方法进行区分。这也是和RPC调用方式或RPC-Restful混合调用方式最大的不同之处。
综合上面的阐述,我们来看一下什么是Restful架构:
REST是一种软件架构模式。核心概念包括:
- 资源(Resource):在REST中,资源可以简单的理解为URI,表示一个网络实体。比如,/users/1/name,对应id=1的用户的属性name。
- 既然资源是URI,就会具有以下特征:名词,代表一个资源;它对应唯一的一个资源,是资源的地址。
- 表现(Representation):是资源呈现出来的形式,比如上述URI返回的HTML或JSON,包括HTTP Header等;
Restful风格优势
使用Restful风格往往具有以下的优势:
- 统一接口,有了统一的规范,大家在接口设计时能够保证理解的一致性。如,强调HTTP应当以资源为中心,并且规范了资源URI的风格;规范了HTTP请求动作(PUT,POST等)的使用,具有对应的语义等。
- 自描述性,URL具有很强可读性的,具有自描述性。
- 无状态性,如果提供无状态的服务接口,可提高应用的水平扩展性。
- 提供OpenAPI,可提供OpenAPI,便于第三方系统集成。
Restful和Http的联系和区别
Http
HTTP是网络上允许发送和接收文档的一个协议。所谓协议就是决定哪些信息是可以交换的、哪些信息是可以响应给其他人的一系列规则。在HTTP中,有两种角色:服务端和客户端。一般总是客户端发起请求,然后服务端做出响应。HTTP是基于文本的,虽然消息体内可能包含其他类型的内容。HTTP消息由消息头和消息内容构成。 消息内容可以为空,他包含在头部指令指挥下的你要传递给其他人的消息内容。
REST
它从2005年开始流行,用来构建一一些像Twitter API这样的应用。 因为REST允许以最小的开销为不同的系统提供服务。从理论上来说,REST并不依附于网络,但是REST总是可以作为HTTP的一种补充。REST是HTTP驱动的,并且完全发挥了HTTP的能力,所以这也是学习HTTP的最佳实践。
综上可以得出REST是HTTP的一种补充,它是http在特定场合下的优化版本。
Rest实践
一般资源操作只有新增、删除、查询、更新,对应HTTP协议中四类请求:POST、DELETE、GET、PUT。但在使用Rest的时候往往需要注意:
- 使用场景,Restful风格特别适合于异构系统之间的调用,另外在分布式场景中也比较适用。比如现在移动端APP的接口设计很多都采用这种风格,另外有不少云平台提供的服务接口也大多采用Restful风格设计。
- 框架支持,以Java版本的为例。Java对于Restful有一个规范定义JAX-RS,而支持Restful框架也不少,比如:Restlet、Jersey、RESTEasy、CXF。相关文章请查询:各JAX-RS实现
说了这么多,那有没有例子呢?大家可以参考:Spring REST实践、百度云推设计、环信api设计