RESTful
1.RESTful是什么
RESTFUL:网络应用程序的设计风格和开发方式,是目前最流行的一种架构风格,它机构清晰、符合标准、易于理解、扩展方便,所以在Web开发中经常被使用,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。
2.xml格式和json格式的区别
直观的区别,xml格式更语义化一些,贴近我们平时的说话习惯,json更像是数据的集合
3.xml相对于json属于重量级了(数据格式)
3.1 DOM
DOM是把一个数据交换格式XML看成一个DOM对象,需要把XML文件整个读入内存,这一点上JSON和XML的原理是一样的,但是XML要考虑父节点和子节点,这一点上JSON的解析难度要小很多,因为JSON构建于两种结构:key/value,键值对的集合;值的有序集合,可理解为数组
3.2 SAX
SAX不需要整个读入文档就可以对解析出的内容进行处理,是一种逐步解析的方法。程序也可以随时终止解析。这样,一个大的文档就可以逐步的、一点一点的展现出来,所以SAX适合于大规模的解析。这一点,JSON目前是做不到得。所以,JSON和XML的轻/重量级的区别在于:
- JSON只提供整体解析方案,而这种方法只在解析较少的数据时才能起到良好的效果;
- XML提供了对大规模数据的逐步解析方案,这种方案很适合于对大量数据的处理。
4.关于数据格式编码及解析难度
4.1 编码方面
- XML和JSON都有各自的编码工具
- JSON的编码要比XML简单,即使不借助工具,也可以写出JSON代码,但要写出好的XML代码就有点困难
- xml和json都是基于文本的, 它们使用的都是Unicode编码,且其与数据交换格式XML一样具有可读性。
4.2 解析方面
在普通的web应用领域,开发者经常为XML的解析伤脑筋,无论是服务器端生成或处理XML,还是客户端用 JavaScript 解析XML,都常常导致复杂的代码,极低的开发效率。
实际上,对于大多数Web应用来说,他们根本不需要复杂的XML来传输数据,XML宣称的扩展性在此就很少具有优势,许多Ajax应用甚至直接返回HTML片段来构建动态Web页面。和返回XML并解析它相比,返回HTML片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。同XML或 HTML片段相比,数据交换格式JSON 提供了更好的简单性和灵活性。在Web Serivice应用中,至少就目前来说XML仍有不可动摇的地位。
5.RESTful使用
5.1常用接口规范
- 安全性 :不会改变资源状态,可以理解为只读的;
- 幂等性 :执行1次和执行N次,对资源状态改变的效果是等价的。
5.2.GET
状态码 | 表示的状态 |
---|---|
200(OK) | 已在响应中发出 |
204(无内容) | 资源有空 |
301(Moved Permanently) | 资源的URI已被更新 |
303(See Other) | 其他(如,负载均衡) |
304(not modified) | 资源未更改(缓存) |
400 (bad request) | 指代坏请求(如,参数错误) |
404 (not found) | 资源不存在 |
406 (not acceptable) | 服务端不支持所需表示 |
500 (internal server error) | 通用错误响应 |
503 (Service Unavailable) | 服务端当前无法处理请求 |
5.3POST
不安全且不幂等
使用服务端管理的(自动产生)的实例号创建资源
创建子资源
部分更新资源
如果没有被修改,则不过更新资源(乐观锁)
状态码 | 表示的状态 |
---|---|
200(OK) | 现有资源已被更改 |
201(created) | 新资源被创建 |
202(accepted) | 已接受处理请求但尚未完成(异步处理) |
301(Moved Permanently) | 资源的URI已被更新 |
303(See Other) | 其他(如,负载均衡) |
400 (bad request) | 指代坏请求(如,参数错误) |
404 (not found) | 资源不存在 |
406 (not acceptable) | 服务端不支持所需表示 |
409 (conflict) | 通用冲突 |
412(Precondition Failed) | 前置条件失败(如执行条件更新时的冲突) |
415 (unsupported media type) | 接受到的表示不受支持 |
500 (internal server error) | 通用错误响应 |
503 (Service Unavailable) | 服务端当前无法处理请求 |
5.4PUT
不安全但幂等
用客户端管理的实例号创建一个资源
通过替换的方式更新资源
如果未被修改,则更新资源(乐观锁)
状态码 | 表示的状态 |
---|---|
200(OK) | 现有资源已被更改 |
201(created) | 新资源被创建 |
301(Moved Permanently) | 资源的URI已被更新 |
303(See Other) | 其他(如,负载均衡) |
400 (bad request) | 指代坏请求(如,参数错误) |
404 (not found) | 资源不存在 |
406 (not acceptable) | 服务端不支持所需表示 |
409 (conflict) | 通用冲突 |
412(Precondition Failed) | 前置条件失败(如执行条件更新时的冲突) |
415 (unsupported media type) | 接受到的表示不受支持 |
500 (internal server error) | 通用错误响应 |
503 (Service Unavailable) | 服务端当前无法处理请求 |
5.5 DELETE
不安全但幂等
删除资源
状态码 | 表示的状态 |
---|---|
200(OK) | 现有资源已被更改 |
301(Moved Permanently) | 资源的URI已被更新 |
303(See Other) | 其他(如,负载均衡) |
400 (bad request) | 指代坏请求(如,参数错误) |
404 (not found) | 资源不存在 |
409 (conflict) | 通用冲突 |
500 (internal server error) | 通用错误响应 |
503 (Service Unavailable) | 服务端当前无法处理请求 |
5.6传统风格与RESTful风格简单对比
操作 | 传统风格URL | method | ------------- | RESTful风格URL | method |
---|---|---|---|---|---|
增加 | /addUser?name=xxx | POST | /users | POST | |
删除 | /deleteUser?id=1 | GET | /user/1 | DELETE | |
修改 | /updateUser?id=123&name=test | POST | /users/123 | PUT | |
查询 | /listUser | GET | /users | GET | |
指定查询 | /getUser?id=456 | GET | /users/456 | GET |
5.7总结
RESTful风格与传统风格大同小异,关键的地方要注意
- 前端视图表单提交的action要与后端相对应
- 不同的操作使用的注解不一样,下面汇总为一个表格方便对比:
操作 | 使用的注解 |
---|---|
增加 | @PostMapping("") |
删除 | @DeleteMapping("") |
修改 | @PutMapping("") |
查询 | @GetMapping("") |
共有条评论 网友评论