RESTful Web Service
REST提供了一组架构约束,当作为一个整体来应用时,强调组件交互的 可伸缩性、接口的通用性、组件的独立部署、以及用来减少交互延迟、增 强安全性、封装遗留留系统的中间组件。
Richardson 成熟度模型
Level 0:基本上不使用REST 它完全的就使用一个URI 一个http方法去处理所有请求 是非常混乱的
Level 1:用资源去区分请求,但是,还是使用一个http的动作 即 一个URI处理一个请求
Level 2: 去区分不同的httpmethod 比方说 一个url 什么时候处理post 什么时候处理get等等
Level 3:使用Hypermedia一个超媒体的驱动
如何实现 Restful Web Service
分为以下几类:
- 识别资源
- 选择合适的资源粒度
- 设计 URI
- 选择合适的 HTTP 方法和返回码
- 设计资源的表述
识别资源
- 找到领域名词
• 能用 CRUD 操作的名词
比如说 之前用到的coffee 和 coffeeorder 进行http操作 - 将资源组织为集合(即集合资源)
比如 所有coffee的放在一起 就是coffee的集合 所有coffeeorder的放在一起 就是coffeeorder的集合 - 将资源合并为复合资源
即 将coffee的集合和coffeeorder集合形成复合资源 - 计算或处理理函数
比如 计算出上海到北京的距离
选择合适的资源粒度
站在服务端的角度,要考虑
- 网络效率
在一次网络交互中处理尽可能多的事情 - 表述的多少
表述设计多大 - 客户端的易用程度
如何使用客户端是方便的
站在客户端的角度,要考虑
- 可缓存性
是否允许缓存 如果 允许 多久更新一次缓存等等 - 修改频率
- 可变性
信息是否可变
构建更好的 URI
- 使用域及子域对资源进行合理的分组或划分
- 在 URI 的路径部分使用斜杠分隔符 ( / ) 来表示资源之间的层次关系
- 在 URI 的路径部分使用逗号 ( , ) 和分号 ( ; ) 来表示非层次元素
- 使用连字符 ( - ) 和下划线 ( _ ) 来改善长路径中名称的可读性(驼峰规则的体现)
- 在 URI 的查询部分使用“与”符号 ( & ) 来分隔参数
- 在 URI 中避免出现文件扩展名 ( 例如 .php,.aspx 和 .jsp )
认识 HTTP 方法
幂等:不管请求多少次 我请求的资源都是一样的
安全:不会改变我资源的各种内容
URI 与 HTTP 方法的组合
认识 HTTP 状态码
所有2开头的状态码都是成功的状态码
所有3开头的状态码都是与跳转 重定向 缓存相关的状态码
所有4开头的状态码都是客户端错误的状态码
所有5开头的状态码都是服务端错误的状态码
选择合适的表述
分为以下几类:
JSON(主要)
- MappingJackson2HttpMessageConverter
- GsonHttpMessageConverter
- JsonbHttpMessageConverter
XML (给人读的)
- MappingJackson2XmlHttpMessageConverter
- Jaxb2RootElementHttpMessageConverter
HTML
ProtoBuf
- ProtobufHttpMessageConverter
来源:CSDN
作者:L# S@
链接:https://blog.csdn.net/weixin_43790623/article/details/104107959