REST设计哲学激起了Web与企业应用开发者的无尽遐想,但用这种方式来开发真正的Web服务并非易事。本书包含了超过100个技巧,帮助您充分利用REST,HTTP和Web基础设施。无论使用何种编程语言和开发框架,您都将了解到如何为客户端/服务器应用设计满足性能、可扩展性、可靠性及安全目标的RESTful Web服务。
《RESTful Web Services Cookbook》(中文版)的每一节都包含一到两个问题描述,带有简单易学、步骤详尽的解决方案,还有使用HTTP请求与响应、XML、JSON和Atom片段的例子。您还将看到针对每个解决方案的实现指南,讨论其中的利弊和权衡。
本书是《RESTful Web Services Cookbook》的中文翻译版,由Subbu Allamaraju所著。
《RESTful Web Services Cookbook》(中文版)从实践出发,涉及设计RESTful Web服务的各个方面,通过问题描述、解决方案、问题讨论的形式在14个章节中详细讨论了统一接口、资源、表述、URI、链接、请求、缓存、安全等诸多内容。无论读者是否设计过RESTful Web服务,具体使用哪种语言,都能在阅读过程中有所收获。本书也可作为手册,根据具体问题描述在书中查找解决办法。
前言
第1章 使用统一接口/1
1.1 如何保持交互的可见性/2
1.2 何时需要权衡可见性/4
1.3 如何维护应用程序状态/6
1.4 如何在服务器端实现安全和幂等的方法/9
1.5 如何在客户端处理安全和幂等方法/12
1.6 何时使用GET方法/13
1.7 何时使用POST方法/15
1.8 如何使用POST方法创建资源/17
1.9 何时使用PUT方法创建新资源/19
1.10 如何使用POST方法实现异步任务/20
1.11 如何使用DELETE方法实现异步删除/23
1.12 何时使用自定义HTTP方法/24
1.13 何时及如何使用自定义HTTP标头/26
第2章 识别资源/29
2.1 如何从领域名词中识别资源/30
2.2 如何选择资源粒度/31
2.3 如何将资源组织为集合/32
2.4 何时将资源合并为复合资源/35
2.5 如何支持计算或处理函数/37
2.6 何时及如何使用控制器来操作资源/40
第3章 设计表述/45
3.1 如何使用实体头来注解表述/46
3.2 如何解释实体头/50
3.3 如何避免字符编码不匹配/51
3.4 如何选择表述格式和媒体类型/52
3.5 如何设计XML表述/56
3.6 如何设计JSON表述/58
3.7 如何设计集合表述/59
3.8 如何保持同构的集合/61
3.9 如何在表述中使用可移植的数据格式/63
3.10 何时使用实体标识符/65
3.11 如何在表述中编码二进制数据/66
3.12 何时以及如何提供HTML表述/68
3.13 如何返回错误/70
3.14 如何在客户端处理错误/74
第4章 设计URI/77
4.1 如何设计URI/77
4.2 如何将URI用做模糊标识符/81
4.3 如何让客户端将URI视为模糊标识符/83
4.4 如何保持酷的URI/85
第5章 Web链接/88
5.1 如何在XML表述中使用链接/89
5.2 如何在JSON表述中使用链接/92
5.3 何时以及如何使用链接标头/93
5.4 如何分配链接关系类型/94
5.5 如何使用链接来管理应用程序的流程/97
5.6 如何处理临时URI/101
5.7 何时以及如何使用URI模板/103
5.8 如何在客户端使用链接/105
第6章 Atom和AtomPub/108
6.1 如何利用Atom建模资源/109
6.2 何时使用Atom/113
6.3 如何使用AtomPub服务和分类文件/117
6.4 如何针对Feed和Entry资源使用AtomPub/119
6.5 如何使用媒体资源/122
第7章 内容协商/125
7.1 如何标明客户端偏好/126
7.2 如何实现媒体类型协商/128
7.3 如何实现语言协商/129
7.4 如何实现字符编码协商/131
7.5 如何支持压缩/132
7.6 何时以及如何发送Vary头/133
7.7 如何处理协商失败/134
7.8 如何使用代理驱动的内容协商/136
7.9 何时支持服务器驱动的协商/137
第8章 查询/139
8.1 如何针对查询设计URI/139
8.2 如何设计查询响应/142
8.3 如何支持有大量输入的查询请求/144
8.4 如何存储查询/146
第9章 Web缓存/149
9.1 如何设置过期缓存头/150
9.2 何时设置过期缓存头/153
9.3 何时以及如何在客户端中使用过期缓存头/156
9.4 如何支持复合资源的缓存/157
9.5 如何保持新鲜且温暖的缓存/158
第10章 条件请求/161
10.1 如何生成Last-Modified和ETag头/163
10.2 如何在服务器端实现条件GET请求/164
10.3 如何从客户端提交条件GET和HEAD请求/167
10.4 如何在服务器端实现条件PUT请求/169
10.5 如何在服务器端实现条件DELETE请求/173
10.6 如何从客户端发起无条件GET请求/175
10.7 如何从客户端提交条件PUT和DELETE请求/176
10.8 如何使POST请求条件化/178
10.9 如何生成一次性URI/181
第11章 其他内容/184
11.1 如何复制资源/185
11.2 如何合并资源/187
11.3 如何移动资源/189
11.4 何时使用WebDAV方法/191
11.5 如何支持跨服务器的操作/193
11.6 如何获取资源的快照/195
11.7 如何撤销资源更新/198
11.8 如何为部分更新提炼资源/200
11.9 如何使用PATCH方法/203
11.10 如何批量处理相似的资源/206
11.11 如何触发批量操作/209
11.12 何时使用POST来合并多个请求/211
11.13 如何支持批量请求/215
11.14 如何支持事务/217
第12章 安全/220
12.1 如何使用基本身份验证来验证客户端/221
12.2 如何使用摘要身份验证来验证客户端/224
12.3 如何使用三方OAuth/226
12.4 如何使用两方OAuth/232
12.5 如何处理URI中的敏感信息/235
12.6 如何维护表述的机密性与完整性/237
第13章 可扩展性与版本控制/239
13.1 如何维持URI的兼容性/240
13.2 如何维持XML和JSON表述的兼容性/242
13.3 如何扩展Atom/245
13.4 如何维持链接的兼容性/249
13.5 如何实现支持可扩展性的客户端/250
13.6 何时需要版本化/251
13.7 如何版本化RESTful Web服务/252
第14章 服务发现/256
14.1 如何编写RESTful Web服务的文档/256
14.2 如何使用OPTIONS/259
附录A 辅助读物/261
附录B REST概述/265
附录C HTTP方法/268
附录D Atom Syndication Format/273
附录E 链接关系类型/279
索引/287