RESTful Web Services Cookbook-改善可扩展性与简约型的解决方案

使用统一接口

HTTP是一种应用层协议,然而,包括SOAP和一些Ajax Web框架在内的不少技术都将HTTP作为一种传输信息协议,这种方法很难充分利用HTTP层的基础设施。

1.1如何保持交互的可见性

作为应用协议,HTTP的设计目标是在客户端和服务器之间保持对库、服务器、代理、缓存、和其他工具的可见性。

识别设计资源,就可以使用GET方法获取资源表示,使用PUT方法更新资源,使用DELETE方法删除资源,使用POST方法执行各种不安全和非等幂的操作;添加适当的HTTP表头来描述请求和响应。

保持请求和响应的可见性,可以具备以下特性:

  • 缓存:缓存响应内容,并在资源修改时使缓存自动失效。
  • 乐观并发控制:检测并发写入,并在操作过期的表述时防止资源发生变更。
  • 内容协商:在给定资源的多个表示中,选择合适的表述。
  • 安全性和等幂性:确保客户端可以重复或重试特定的HTTP请求。

可见性的实现:

  • HTTP交互是无状态的。
  • HTTP使用一个统一接口。
  • HTTP使用一种与MIME类似的信封格式进行表述编码。

1.2何时需权衡可见性

有多个共享数据的资源,或一个操作要修改多个资源,可考虑降低可见性。得到更好的信息抽象、松散的耦合度、更好的网络效率、更好的资源粒度。

1.3如何维护应用程序状态

在客户端保存应用程序的状态

  • 将应用程序状态编码到URI里,并通过链接在表述中包含这些URI。客户端使用这些URI进行资源交互
  • 状态较大,或出于安全性考虑,则可以持久化存储(如数据库、文件系统)应用程序状态,并将其状态的引用编码在URI中。

资源表述中的链接是保持应用程序状态的最后地方。

  • 应当选择形如数据库或文件系统的持久化存储来保存应用程序状态。
  • 当数据量较小时,服务器可以将状态编码在URI中。
  • 在链接中保存应用程序的状态,要加入检查方式(如签名)检测和防止伪造状态。

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

方法 安全 幂等
GET YES YES
HEAD YES YES
OPTIONS YES YES
PUT NO YES
DELETE NO YES
POST NO NO
  • 安全性并不意味服务每次都返回同一结果。它只表明客户端可以发起请求,并知道它不会改变资源的状态。
  • 幂等性保证客户端重复发起某个请求的效果一致。

1.5如何在客户端处理安全和幂等方法

  • 把GET,OPTIONS和HEAD看做只读。
  • 在网络和软件出错时,重新提交GET、PUT、DELETE请求做确认。
  • 不重复提交POST请求。

1.6何时使用GET方法

  • 使用GET方法进行安全和幂等的信息获取。
  • 添加 Cache-Control:no-cache 头来确保响应不被缓存。

1.7何时使用POST

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

1.8如何使用POST方法创建资源

POST方法的应用场合之一是创建新资源,该协议类似使用“工厂方法模式”创建新对象。

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,517评论 0 6
  • 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式。”但是在要求详细讲述它所提出的各个约束,以及如...
    时待吾阅读 3,408评论 0 19
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,397评论 25 707
  • 霞浦县的东壁村依山傍海、视野宽阔,特别是种植及收割紫菜的季节,成排的紫菜架、穿梭其中的舢板船只,场景极为壮观。这里...
    樱桃SH阅读 932评论 4 5