0%

RESTful API

RESTful API到底怎么玩?记录一下。

是啥

按照是啥、有啥用、怎么用的分析步骤,先解决RESTful是什么的问题。先上高大上的定义,wiki这么说:

表现层状态转换(英语:Representational State Transfer,缩写:REST

##有啥用

我的理解RESTful就是一种设计风格,通俗点说就是我们设计API的一种指导思想。主要有几个特点:

  • 统一
  • 无状态
  • 可缓存
  • 分层

其他特征没觉得有什么用,暂且不说。个人觉得无状态是RESTful最大的特点,和http协议的设计思路类似。另外RESTful应该着重强调对资源的控制,即每一个URI代表一种资源,客户端通过HTTP动词,对服务端的资源进行操作。

但是回到有啥用这个问题上,个人觉得风格统一,容易理解,方便使用是比较大的优点,其他的倒是没有了。

怎么用

RESTful的核心思想是用五个HTTP动词对资源进行操作:

  1. GET(获取) 从服务器获取一个资源或者资源列表
  2. POST(创建) 在服务器上创建一个新资源
  3. PUT(更新) 以整体方式更新服务器上的一个资源
  4. PATCH(更新) 更新服务器上的某个资源的部分属性
  5. DELETE(删除) 删除服务器上的资源

另外有两个不常用的动词:

  1. HEAD 获取资源元数据
  2. 获取信息。这个cors解决跨域的时候有可能用到。

以下是一篇文章中的栗子:

  • GET /zoos:获取所有动物园信息
  • POST /zoos: 创造一个新的动物园
  • GET /zoos/ZID: 获取整个动物园对象
  • PUT /zoos/ZID: 更新整个动物园对象
  • PATCH /zoos/ZID: 更新动物园对象中的某些属性
  • DELETE /zoos/ZID: 删除动物园
  • GET /zoos/ZID/animals: 获取ZID这个动物园下的所有动物

可以看出这里的栗子URL采用了path info的模式,所有查询参数都在URL路径中。但是RESTful风格一般没有对这个做要求,放在后面的参数中也可以。

##认证怎么搞

常用的接口认证有如下几种方式:

Token(JSON Web Token)

JWT 是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权,JWT主要由以下三部分构成,由.进行连接

  • Header
  • Payload
  • Signature

所以完整的JWT格式应该是类似xxxxx.yyyyy.zzzzz这样。

header主要声明token类型和使用的加密算法,比如:

1
{
2
  "alg": "HS256",
3
  "typ": "JWT"
4
}

然后将头部进行Base64加密,得到第一部分。

Payload

payload包含你进行认证需要的数据,比如:

1
{
2
  "sub": "1234567890",
3
  "name": "John Doe",
4
  "admin": true
5
}

然后将有效Payload用Base64进行编码,以形成JWT的第二部分。

Signature

要创建签名部分,必须要有已经编码的header,编过码的Payload,一个密匙(secret)和加密算法。

例如,如果想使用HMAC SHA256算法,签名将按以下方式创建:

1
HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)

更详细的文档可以参见官方网站:https://jwt.io/

跨域

既然前后端分离了,就不可避免的要遇到跨域问题。跨域问题单独拎出来总结吧。

//TODO

参考资料: