RESTFUL是一种网络应用程序的设计风格和开发方式,是一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。
Representational State Transfer 表现层状态转化( 资源定位及资源操作) ,表象层面说就是通过get,post,put,delete方式来实现前后台通信的一种轻量级,跨平台,跨语言架构设计风格的web服务。
一、设计规范
1、 每一个URI代表1种资源;
2、 客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
3、 通过操作资源的表现形式来操作资源;
4、 资源的表现形式是XML或者HTML;
5、 客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息;
二、应用范围
1.WebService
Java的 jax -rs规范约束了RESTful WebService的开发方式,而cxf3.0已经实现了jax-rs 的全套规范。
WebService接口代码举例,按如下风格定义的WebService接口就是遵循RESTful开发规范的:
@Path("/userservice/")
public interface IMyService {
@Path("/addUser/")
@POST
Response addUser(User user);
@Path("/delUser/{id}/")
@DELETE
Response delUser(@PathParam("id") String id);
@Path("/updateUser/")
@PUT
Response updateUser(User user);
@Path("/getUserById/{id}/")
@GET
@Produces("application/json")//返回json数据格式
User getUserById(@PathParam("id") String id);
@Path("/")
@GET
@Produces("application/json")//返回json数据格式
List<User> findAllUsers();
}
2.Http调用
在定义请求地址时,可以按照RestFul的规范,当然不是强制性的,每个团队定义自己的标准即可,根据语义化,最好是完全按照规范来。这样前后端分离开发的时候,能减少很多不必要的沟通。
三、设计误区
RESTful架构有一些典型的设计误区。
最常见的一种设计错误,就是URI包含动词。因为"资源"表示一种实体,所以应该是名词,URI不应该有动词,动词应该放在HTTP协议中。
举例来说,某个URI是/posts/show/1,其中show是动词,这个URI就设计错了,正确的写法应该是/posts/1,然后用GET方法表示show。
如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源。比如网上汇款,从账户1向账户2汇款500元,错误的URI是:
- POST /accounts/1/transfer/500/to/2
正确的写法是把动词transfer改成名词transaction,资源不能是动词,但是可以是一种服务:
- POST /transaction HTTP/1.1
- Host: 127.0.0.1
from=1&to=2&amount=500.00
另一个设计误区,就是在URI中加入版本号:
1、 http://www.example.com/app/1.0/foo;
2、 http://www.example.com/app/1.1/foo;
3、 http://www.example.com/app/2.0/foo;
因为不同的版本,可以理解成同一种资源的不同表现形式,所以应该采用同一个URI。版本号可以在HTTP请求头信息的Accept字段中进行区分(参见Versioning REST Services):
1、 Accept:vnd.example-com.foo+json;version=1.0;
2、 Accept:vnd.example-com.foo+json;version=1.1;
3、 Accept:vnd.example-com.foo+json;version=2.0;
我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!
参考资料:
1、 https://blog.csdn.net/qq_34218628/article/details/80696649;
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: