设计好的RESTful Web Service

这一生的挚爱 提交于 2020-01-31 03:19:05

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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!