Restful web Services ----第一章笔记

REST(表述性状态转移)

HTTP 的设计 目标是在客户端和服务器之间对库、服务器、代理、缓存和其他工具的可见性。可见性是:一个组件能够对其他两个组件之间的交互进行监视或仲裁的能力。当协议是可见的时,缓存、代理、防火墙等组件既可以监视甚至参与其中。

HTTP 通过以下途径来实现可见性:

  • HTTP的交互是无状态的,任何HTTP中介都可以推断出给定请求和响应的意义,而无须关联过去或将来的请求和响应。
  • HTTP使用一个统一接口,包括有OPTIONS,GET,HEAD,POST,DELETE和TRACE方法。接口中的每一个方 法操作一个且仅有一个资源。每个方法的语法和含义不会因应用程序或资源的不同而发生改变。
  • HTTP使用一种与MIME类似的信封格式进行表述编码。这个格式明确区分标头和内容。

一个HTTP请求的格式:
请求行:HTTP方法 资源路径 HTTP版本
请求的表述形式表头:Content-Type:...
请求的表述内容

POST /api/bookclubserver/note/comment_text/put HTTP/1.1\r\n
User-Agent: curl/7.35.0\r\n
Host: localhost:8080\r\n
Accept: */*\r\n
content-type: application/json\r\n
Content-Length: 157\r\n\r\n
{ \"note_id\":\"201505080931476889\",\"user_id\":\"201504171121428216\",\"note_comment_content\":\"Is luck to meet you!\",\"p_note_comment_id\":\"-1\",\"p_note_user_id\":\"-1\"}

一个HTTP响应的格式:
响应行:HTTP版本 状态码 状态消息
响应的表述形式标头:
响应的表述内容

HTTP/1.1 200 OK
connection: keep-alive
server: Cowboy
date: Fri, 08 May 2015 01:43:11 GMT
content-length: 61
content-type: text/html
{"return_code":0,"status":[],"comment_id":201505080943113579}

对于RESTful 服务,主要目标必定是尽最大可能保持可见性:使用HTTP方法时,其语义要与HTTP所规定的语义保持一致,并添加适当的标头来描述请求和响应;另一方面是使用适当的状态码和状态消息,以便代理、缓存和客户端可以决定请求的结果,状态码是一个整数,状态消息是文本。

降低可见性原因:
-数据的重叠

为了其他好处放弃可见性:
-方便客户端:为了方便客户端使用,服务器可能需要设计特定目标的粗粒度组件资源
-抽象
-网络效率:当客户端需要在短时间内连续执行几个操作时,可能需要将这些操作组合到一个批处理中,以降低网络延迟。

如何在服务器端实现安全和幂等的方法

实现GET/OPTION/HEAD方法时,不要引起任何副作用。当客户端重新提交一个GET/HEAD/OPTIONS/PUT或DELETE请求时,确保服务器提供同样的表述形式:


http_method.png
实现安全方法

为了保证安全方法不会引起副作用,可以将安全方法实现为只读操作:即客户端发起请求时,不会改变资源的状态。

幂等方法

幂等性保证客户端重复发起某个请求的效果与一次请求的效果一致。除POST以外的所有方法都必须是幂等的。在编程语言的术语中,幂等方法类似于setter

DELETE方法的幂等性

DELETE方法是幂等的。这意味着就算服务器在前一个请求中已经删除了资源,它也必须返回200 (OK)响应码

如何在客户端吹安全和幂等方法

安全方法

把GET/OPTIONS/HEAD看做只读操作,需要时,可以随时发起这些请求。

幂等方法

幂等性保证了客户端可以在不能肯定服务器是否成功处理了请求时,重复发起这一请求。在HTTP中,除了POST以外的所有方法都是幂等的。

何时使用GET方法

使用 GET方法进行安全与幂等的信息获取。不要把GET方法用于不安全或非幂等操作,因为这样做可能会造成永久性的、意想不到的、不符合需要的资源改变。

何时使用POST方法

  • 创建新的资源。
  • 通过一个控制器资源来修改一个或多个资源
  • 执行需要大数据输入的查询
  • 在其他HTTP方法看上去不合适时,执行不安全或非幂等的操作。

何时使用PUT方法创建新资源

只有在客户端可以决定资源的URi时才使用PUT方法创建新资源,否则使用POST.举个例子,一台存储服务器可能为每个客户端分配一个根URL,并让客户端把根URI作为文件系统的根目录,以便创建新资源,如果不能控制URI,请使用POST方法

如何使用POST方法实现异步任务

HTTP是一种同步、无状态的协议。当客户端向服务器提交一个请求时,无论成功与否,客户端都期望得到一个回答。
在接收到POST请求时,创建一个新的资源,并返回状态码202,其包含新资源的表述,这个新资源目的是让客户端可以跟踪异步任务的状态。

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,517评论 0 6
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,373评论 25 707
  • HTTP概述 超文本传输协议(HTTP,HyperText Transfer Protocol) 是互联网上应用最...
    曹渊说创业阅读 3,838评论 2 61
  • Aim High to the sky, In all that you do. Because you just...
    糖月阳阅读 356评论 0 0