姚宁的博客

RESTFul的理解

一句话理解

正确的使用HTTP Method对网络资源进行状态改变


REST是什么

Representational State Transfer 即 表现层状态转移
Roy Fielding2000年在自己的博士论文提出的互联网软件架构原则

这位老兄是HTTP协议的设计者 Apache服务器软件的作者之一
可以说为当今繁荣的互联网做出了巨大的贡献 成千上万的开发者在他设计的协议上开发软件

RESTFul是什么

即符合REST原则的架构 是目前互联网最为流行的互联网软件架构
具有结构清晰、易于理解、方便扩展的特点

如何理解REST

理解REST 也就是理解Representational State Transfer(表现层状态转移)的含义
我们拆开了来看

  1. Representational 表现层 其实是 “网络资源”的呈现方式
    比如数据库里边的一条记录、一张图片、一段文本、一首歌这些都属于”网络资源”
    JSON、XML、HTML、JPG甚至是二进制都可以用来作为”网络资源”的呈现方式
    结合来看 Representational可以借助
    一条记录通过JSON的格式展示或一张图片通过JPG的格式展示
    这样的例子来理解
  2. State Transfer 状态转化
    Http协议是无状态的 客户端通过发送请求改变”网络资源”的状态
    从而实现”网络资源”状态变化 具体一些 就是通过HTTP动词来实现的
动词 作用
GET 获取资源
POST 创建(更新)资源
PUT 更新资源
DEKETE 删除资源

总结起来就是 通过Http请求获取或修改网络资源的状态

举个栗子

错误的设计 含义 正确的设计
../v1/animal/getDog?id=1 获取ID为1的狗狗 GET ../v1/animal/dog?id=1
../v1/animal/makeDog 创建一只狗 POST ../v1/animal/dog
../v1/animal/changeDog?id=1 修改ID为1的狗狗 PUT ../v1/animal/dog?id=1
../v1/animal/deleteDog?id=1 删除ID未1的狗狗 DELETE ../v1/animal/dog?id=1

可以明显的看出来 RESTFul风格的Api可以简单的理解为
对HTTP Method的正确使用

好的RESTFul设计应该是什么样的

  1. 使用Https协议
  2. 使用专有域名
    例如 api.xxxx.com
  3. 版本号放入url中
    例如 api.xxxx.com/v1/…
  4. url中不要出现动词 具体动作应该由合适的Http Method决定
  5. 常用参数应该简洁易懂
    例如 limit(指定数量)、offset(指定偏移)、page(指定分页号)、sort_by(指定排序的键)、order(asc\desc正序还是逆序)
  6. 合理、统一的返回信息
    例如 code、msg、data
  7. 身份认证使用OAuth2.0

多说一句

鉴于PUT,DELETE方法会对服务器上的资源进行写操作,因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法,对于此类请求均会返回405错误

参考资料

理解RESTFul架构
HTTP状态码 知乎讨论