Restful

通俗的解释Restful

假设我们要去一家西餐厅吃饭,向前台服务员说,“一个芝士蛋糕,一杯拿铁,两条吸管,谢谢啦”。

Level 0 - 面向前台

“向前台点一杯拿铁”,用JSON来表示如下

{
    "addOrder": {
        "orderName": "latte"
    }
}

“我们通过这样一段代码,告诉前台,我们新增了一笔订单,订单是一杯拿铁”,然后前台给了我们下面这段回复

{
    "orderId": "123456"
}

“如上即代表是订单的编号”,之后,等前台喊123456的客户取餐即可
接下来,假设我们有一张会员卡,我们想查询会员卡的余额,这时候就要向前台发另一个询问,如下

{
    "queryBalance": {
        "cardId": "886333"
    }
}

“查询卡号为886333”会员卡的余额,之后前台返回如下

{
    "balance": "0"
}

没钱了,那就只好取消这笔订单了

{
    "deleteOrder": {
        "orderId": "123456"
    }
}
Level 1 - 面向资源

何为面向资源呢,假设我们还是要下单,如下

/orders

{
    "addOrder": {
        "orderName": "latte"
    }
}

订单是一种资源,/orders可以理解为是咖啡厅专门管理订单的人,可以处理相关订单的各种操作。
接着继续返回订单号

{
    "orderId": "123456"
}

接下来继续查询余额

/cards

{
    "queryBalance": {
        "cardId": "886333"
    }
}

家下来继续取消订单

/orders

{
    "deleteOrder": {
        "orderId": "123456"
    }
}
Level 2 - 打上标签

接下来继续优化,负责订单的人,需要处理关于订单的各种操作,每次都要判断里面是何种操作很麻烦,所以,在新增的资源里都要加上资源请求的类型,例如新增资源使用POST标注,查询用GET,删除用DELETE,“还有修改类的,修改分为两种,第一种,如果这个修改,无论发送多少次,最后一次修改后的资源,总是和第一次修改后的一样,比如将拿铁改为猫屎,那么用‘PUT’表示;第二种,如果这个修改,每次修改都会让这个资源和前一次的不一样,比如是加一杯咖啡,那么这种请求用‘PATCH’或者‘POST’表示”

POST /orders

{
    "orderName": "latte"
}

接下来查询余额

GET /cards

{
    "cardId": "886333"
}

上面的请求可以优化为

GET /cards/886333

取消订单同样道理

DELETE /orders/123456
Level 3 - 完美服务

店家返回信息里,他们不仅返回用户的订单编号,还返回可以对订单进行的操作,如下

{
    "orderId": "123456",
    "link": {
        "rel": "cancel",
        "url": "/order/123456"
    }
}

这样就不用再次请求返回信息了

总结

image.png

REST是英文representational state transfer(表象性状态转变)或者表述性状态转移;Rest是web服务的一种架构风格;使HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议;轻量级,跨平台,跨语言的架构设计;它是一种设计风格,不是一种标准,是一种思想。

  • Level 0和Level 1的最大区别是Level 1有了RESTFUL的第一个特征面向资源,这对构建可伸缩、分布式的架构是至关重要的,如果把Level0的数据格式换成Xml,那么其实就是SOAP,SOAP(对于应用程序开发来说,使程序之间进行因特网通信是很重要的。目前的应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是 HTTP 不是为此设计的。RPC 会产生兼容性以及安全问题;防火墙和代理服务器通常会阻止此类流量。通过 HTTP 在应用程序间通信是更好的方法,因为 HTTP 得到了所有的因特网浏览器及服务器的支持。SOAP 就是被创造出来完成这个任务的。SOAP 提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。)的特点是关注行为和处理,和面向资源的RESTful有很大的不同。
    Level 0和Level 1都不好,因为他们只是把HTTP当做一个传输的通道,没有把HTTP当做一个传输协议
  • Level 2,真正的将HTTP当做一个传输协议,它使用了HTTP动词,GET/POST/DELETE/PATCH等,这些都是HTTP的规范,规范的作用自然是重大的,用户看到一个POST请求,就知道它不是幂等的,使用时要小心,看到PUT,就知道他是幂等的,调用多几次都不会造成问题,当然,这些的前提都是API的设计者和开发者也遵循这一套规范,确保自己提供的PUT接口是幂等的。
  • Level 3可以理解为每个资源都有它的状态,,在不同的状态下,可以对他进行的操作不一样,理解了Level 3 再来理解RESTFUL的意思,“表述性状态转移”就很好理解了。
    Level3的Restful API,给使用者带来了很大的便利,使用者只需要知道如何获取资源的入口,之后的每个URI都可以通过请求获得,无法获得就说明无法执行那个请求。

现在绝大多数的RESTful接口都做到了Level2的层次,做到Level3的比较少。当然,这个模型并不是一种规范,只是用来理解Restful的工具。所以,做到了Level2,也就是面向资源和使用Http动词,就已经很Restful了。Restful本身也不是一种规范,我比较倾向于用“风格"来形容它。如果你想深入了解Level3,可以阅读《Rest in Practice》第五章。

本文参考:https://zhuanlan.zhihu.com/p/30396391

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容