RESTFUL梗概
RESTFUL: url为名词,http操作为动词,进行representation分配,更多的依靠http的性质如<query>栏等进行操作,http性质利用越多越好
根据《HTTP权威指南所描述》,url的设计遵循
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
作用
作用:有利于前后端彻底分离,解决请求问题
关键词:
- 无状态
- 资源间相互独立,当前查询不依赖于前一个查询,也遵循原子性进行设计也不属于RESTFUL
典型例子
delete /resource/userid
get /resource
post /login
delete /login/{userid}
存在问题
- 批量操作,登陆登出
- 复杂请求下url的繁杂,和过多的url
解决方式:
- RPC混用
- 全部使用SOAP
- 利用集合
例题
- 如何将
POST /trips/123/start
POST /trips/123/finish
POST /trips/123/cancel
用REST方式重写?
Solution: 将start, finish, cancel等视作状态(资源)
POST /trips/123/start --- userid in post request
POST/DELETE /trips/finish/123 -- since it's delete operation
POST/DELETE /trips/cancellation/123 -- since it's delete operation
其中我们将trips视为一种资源集合,其他更改为名词,如start -> start, finish -> finish, cancel -> cancellation
- 如何将
POST /SendMessage HTTP/1.1
Host: api.example.com
Content-Type: application/json
{"userId": 501, "message": "Hello world!"}
改写为REST形式
Solution:
POST 501/messages HTTP/1.1 //多利用url进行处理
HOST: api.example.com
Content-Type: application/json
{"message": "Hello!"}
- 如何将
GET trips/sharemessage?src=user1&to=user2
改写为REST 形式
GET trips/message?src=user1&to=user2
- REST如何进行批量操作?
Solution: 创建资源set,在set中创建set
DELETE/POST users/userset1
或者可以
POST users
{"set": "userset1"}
REST中可以不出现单个资源只出现资源集合吗?
Solution: 可以,也可以不出现资源集合,只出现单个资源,只要满足存在Representation即可`
网友评论