RESTFUL特性探究

RESTFUL梗概

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

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

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

作用

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

  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即可`

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式。”但是在要求详细讲述它所提出的各个约束,以及如...
    时待吾阅读 3,480评论 0 19
  • 软笔写出来的字更有型。 练字可以钢笔,也可以软笔。 不要用圆珠笔和黑笔。 练字有点意思! 注意笔画顺序,注意文字结构。
    乌龟的慢生活阅读 973评论 0 0
  • 前两天,妈妈接到家里姑父的电话,讲下月14号表哥在济南结婚,通知过去参加婚礼。妈妈担心她自己过去不太好,于是自己琢...
    冰天落落阅读 567评论 0 2
  • 小时候他吃完饭就会来到楼前的梨树底下,抬着头冲着她家的阳台喊她的名字,不一会她就探出一个小脑袋瓜对他说:“等我1分...
    Ashesandwine阅读 219评论 0 0
  • 我的婚姻很不幸福,然而我却没有离婚,一边不断的听心理学,找自己的毛病,不能肯定自己,一边又对别人给自己造成的伤害长...
    夏雪_7994阅读 153评论 0 0