RESTFUL特性探究

RESTFUL梗概

RESTFUL: url为名词,http操作为动词,进行representation分配,更多的依靠http的性质如栏等进行操作,http性质利用越多越好

根据《HTTP权威指南所描述》,url的设计遵循

://:@:/;?#

作用

作用:有利于前后端彻底分离,解决请求问题
关键词:

  1. 无状态
  2. 资源间相互独立,当前查询不依赖于前一个查询,也遵循原子性进行设计也不属于RESTFUL

典型例子

delete /resource/userid
get /resource
post /login
delete /login/{userid}

存在问题

  1. 批量操作,登陆登出
  2. 复杂请求下url的繁杂,和过多的url

解决方式:

  1. RPC混用
  2. 全部使用SOAP
  3. 利用集合

Reference

例题

  1. 如何将
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

  1. 如何将
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!"}
  1. 如何将
GET trips/sharemessage?src=user1&to=user2

改写为REST 形式

GET trips/message?src=user1&to=user2
  1. REST如何进行批量操作?
    Solution: 创建资源set,在set中创建set
DELETE/POST users/userset1

或者可以

POST users
{"set": "userset1"}

REST中可以不出现单个资源只出现资源集合吗?

Solution: 可以,也可以不出现资源集合,只出现单个资源,只要满足存在Representation即可`

你可能感兴趣的:(RESTFUL特性探究)