RESTful API到底怎么玩?记录一下。
是啥
按照是啥、有啥用、怎么用的分析步骤,先解决RESTful是什么的问题。先上高大上的定义,wiki这么说:
表现层状态转换(英语:Representational State Transfer,缩写:REST)
##有啥用
我的理解RESTful就是一种设计风格,通俗点说就是我们设计API的一种指导思想。主要有几个特点:
- 统一
- 无状态
- 可缓存
- 分层
其他特征没觉得有什么用,暂且不说。个人觉得无状态是RESTful最大的特点,和http协议的设计思路类似。另外RESTful应该着重强调对资源的控制,即每一个URI代表一种资源,客户端通过HTTP动词,对服务端的资源进行操作。
但是回到有啥用这个问题上,个人觉得风格统一,容易理解,方便使用是比较大的优点,其他的倒是没有了。
怎么用
RESTful的核心思想是用五个HTTP动词对资源进行操作:
- GET(获取) 从服务器获取一个资源或者资源列表
- POST(创建) 在服务器上创建一个新资源
- PUT(更新) 以整体方式更新服务器上的一个资源
- PATCH(更新) 更新服务器上的某个资源的部分属性
- DELETE(删除) 删除服务器上的资源
另外有两个不常用的动词:
- HEAD 获取资源元数据
- 获取信息。这个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
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
参考资料: