REST简介
- 2000年 Roy Thomas Fielding,HTTP协议的主要设计者,Apache基金会的第一任主席;
- 互联网软件的架构原则,一种风格。如果一个架构符合REST原则,就称它为RESTful架构;
- Representational State Transfer 翻译为 “变现层状态转化”;
- 资源(Resources)
- REST的名称“表现层状态转化”中省略了主语。“表现层”其实指的是“资源”(Resources)的表现层;
- 所谓“资源”,就是网络上的一个实体,可以用URI指向它;
- 表现层(Representation)
- 资源是一种信息实体,它可以有多种外在表现形式。我们把“资源”具体呈现出来的形式称它为“表现层”(Representation),如,文本可以用txt格式表现,也可以用HTML格式、xml格式、json格式表现,甚至可以采用二进制格式;
- 资源的具体表现形式应该在HTTP请求头的信息中用Accept和Content-type字段指定,这两个字段才是对“表现层”的描述
- 状态转化(State Transfer)
- HTTP协议里有5个常用的标识操作的方式的动词:GET、POST、PUT、DELETE、PATCH
- GET:用来获取资源
- POST:用来新建资源(也可以用来更新资源)
- PUT:用来更新资源
- DELETE:用来删除资源
- PATCH:用来更新资源的部分属性
- 资源(Resources)
REST风格的架构
-
使用“api”作为web上下文
http://192.168.0.1/api -
增加版本标识
http://192.168.0.1/api/v1.1 -
标识资源
将资源名称放在URL中
http://192.168.0.1/api/v1.1/user
如果资源有层级关系,则放入层级关系,如:用户属于系统管理,可以这么写
http://192.168.0.1/api/v1.1/system/user -
REST中的HTTP Method
新增用户
POST http://192.168.0.1/api/v1.1/system/user查找ID为451的用户 GET http://192.168.0.1/api/v1.1/system/user/451 查询所有用户 GET http://192.168.0.1/api/v1.1/system/user 如果有翻页,可以增加offset、limit等参数 GET http://192.168.0.1/api/v1.1/system/user?offset=1&limit=20&sortBy=name&sortOrder=desc 更新ID为451的用户 PUT http://192.168.0.1/api/v1.1/system/user/451 删除ID为451的用户 DELETE http://192.168.0.1/api/v1.1/system/user 可以为资源标识添加后缀,使得REST代码更加容易阅读,比如: GET http://192.168.0.1/api/v1.1/system/user/451.json 现在也有一种设计REST URI的方式,把操作也放在URI中,HTTP方法主要采用GET 和 POST
-
REST中的HTTP Status
200 OK 用户请求成功
400 错误的请求
404 NOT Found
405 HTTP Method使用错误,如使用GET方法访问POST方法
406 表示无法使用请求的内容特性来响应请求的资源,如在SpringBoot中,请求后缀以html结尾,但同时请求的HTTP头中又包含了Accept:application/json
500 服务器内部错误
REST vs Webservice
-
前者更轻量级,开发一个Webservice服务实现要比开发REST慢很多
-
WS-* 协议复杂
-
在传输数据上,JSON比XML更为流行,XML的解析性能方面不理想
-
XML在网络间传输的数据量会大一些,不如JSON简单
WS-*是指一系列与WS相关的规范,比如:
WS-Security 安全相关,还有WS-Trust;
WS-Addressing 访问调用相关规范
WS-BPEL 业务处理规范
WS-AtomicTransaction 事务相关,还有WS-Transaction
WS-Management 管理相关规范
李家智《Spring Boot 2精髓》学习笔记