ASP.NET Web API设计
Glenn Block, Pablo Cibraro, Pedro Félix, Howard Dierking, Darrel Miller
金迎 译
出版时间:2015年01月
页数:456
“这本书提供了及时而全面的指南,帮助人们使用ASP.NET Web API构建坚实的系统,融合了ASP.NET Web API团队的经验与软件业界多年的专业积累。”
——Scott Guthrie,微软“云和企业”副总裁
“第一次获悉本书时,我就急切地想读,原因有二。首先,我当前的工作中涉及为应用设计API以使之与多种系统交互。其次,是因为本书的一位作者Glenn Block,我认识他有段时间了,我见过他,与他有过对话,读了他的大量博文,我确定本书不会让人失望,而事实证明确实如此。”
——Joseph Guadagno,亚利桑那Southeast Valley .NET用户组创始人

如何为浏览器和移动设备等多客户端设计和构建可演化Web API?本书以ASP.NET Web API框架为例,系统介绍了相关的理论和工具,让读者全面掌握设计和实现可演化Web API的技术。
本书主要面向有经验的.NET开发人员。不过,书中关于Web API基础理论和设计的内容同样适用于Java、Ruby、PHP和Node等开发者。

· 深入理解HTTP,以及API开发的概念和风格
· ASP.NET Web API基础知识,包括该框架处理HTTP请求的生命周期
· 以“问题跟踪”API为例,探讨用Collection+JSON实现超媒体支持
· 采取BDD(行为驱动开发)方式开发ASP.NET Web API,实现和改进应用
· 探索可响应变化的客户端技术,使客户端便于使用超媒体API
· 全面介绍ASP.NET Web API的内部工作机制,包括安全性和可测试性
  1. 序  
  2. 前言 
  3. 第一部分 基础知识
  4. 第1章 因特网、万维网和HTTP协议
  5. 1.1 Web体系结构  
  6. 1.1.1 资源  
  7. 1.1.2 URI  
  8. 1.1.3 酷URI  
  9. 1.1.4 表示
  10. 1.1.5 媒体类型
  11. 1.2 HTTP协议
  12. 1.2.1 HTTP 1.1之后  
  13. 1.2.2 HTTP消息交换
  14. 1.2.3 中间层
  15. 1.2.4 中间层类型
  16. 1.2.5 HTTP方法
  17. 1.2.6 标头
  18. 1.2.7 HTTP状态码
  19. 1.2.8 内容协商
  20. 1.2.9 缓存
  21. 1.2.10 身份验证
  22. 1.2.11 身份验证方案
  23. 1.2.12 附加身份验证方案
  24. 1.3 小结
  25. 第2章 Web API  
  26. 2.1 什么是Web API 
  27. 2.2 SOAP Web服务
  28. 2.3 Web API的起源
  29. 2.4 Web API革命开始
  30. 2.5 关注Web 
  31. 2.6 Web API指南
  32. 2.7 特定领域的媒体类型
  33. 2.8 媒体类型档案
  34. 2.9 多个表示
  35. 2.10 API风格
  36. 2.10.1 Richardson成熟度模型
  37. 2.10.2 RPC(RMM第0级)
  38. 2.10.3 资源(RMM第1级)
  39. 2.10.4 HTTP 谓词(RMM第2级)
  40. 2.10.5 以资源为中心的API  
  41. 2.10.6 超媒体(RMM第3级)
  42. 2.10.7 REST  
  43. 2.10.8 REST约束
  44. 2.11 小结 
  45. 第3章 ASP.NET Web API 101 
  46. 3.1 核心场景
  47. 3.1.1 第一类HTTP编程
  48. 3.1.2 对称的客户端和服务器编程体验
  49. 3.1.3 对不同格式的灵活支持
  50. 3.1.4 告别“尖括号编码”  
  51. 3.1.5 支持单元测试
  52. 3.1.6 多种托管选项
  53. 3.2 ASP.NET Web API入门
  54. 3.3 新建Web API项目
  55. 3.3.1 WebApiConfig  
  56. 3.3.2 ValuesController 
  57. 3.4“Hello Web API!”  
  58. 3.4.1 创建服务
  59. 3.4.2 客户端
  60. 3.4.3 宿主
  61. 3.5 小结
  62. 第4章 处理架构
  63. 4.1 托管层
  64. 4.2 消息处理程序管道
  65. 4.3 控制器处理
  66. 4.4 小结
  67. 第二部分 真实世界的API开发
  68. 第5章 应用程序
  69. 5.1 为什么要可演化
  70. 5.1.1 演化的障碍
  71. 5.1.2 代价是什么
  72. 5.1.3 为什么不创建新版本
  73. 5.1.4 付诸实践
  74. 5.2 应用程序目标
  75. 5.2.1 目标
  76. 5.2.2 机会
  77. 5.3 信息模型
  78. 5.3.1 子域
  79. 5.3.2 相关资源
  80. 5.3.3 属性组
  81. 5.3.4 属性组的集合
  82. 5.3.5 信息模型与媒体类型
  83. 5.3.6 问题集合
  84. 5.4 资源模型
  85. 5.4.1 根资源
  86. 5.4.2 搜索资源
  87. 5.4.3 集合资源
  88. 5.4.4 个体资源
  89. 5.5 小结
  90. 第6章 媒体类型选择与设计
  91. 6.1 自描述
  92. 6.2 协议类型
  93. 6.3 媒体类型
  94. 6.3.1 原始格式
  95. 6.3.2 流行格式
  96. 6.3.3 新格式
  97. 6.3.4 超媒体类型
  98. 6.3.5 媒体类型爆炸
  99. 6.3.6 通用媒体类型和档案
  100. 6.3.7 其他超媒体类型
  101. 6.4 链接关系类型
  102. 6.4.1 语义
  103. 6.4.2 替换嵌入资源
  104. 6.4.3 间接层
  105. 6.4.4 引用数据
  106. 6.4.5 工作流
  107. 6.4.6 语法
  108. 6.4.7 完美结合
  109. 6.5 设计新的媒体类型协议
  110. 6.5.1 选择格式
  111. 6.5.2 支持超媒体
  112. 6.5.3 可选、强制、省略和适用
  113. 6.5.4 嵌入元数据和外部元数据
  114. 6.5.5 可扩展性
  115. 6.5.6 注册媒体类型
  116. 6.6 设计新的链接关系
  117. 6.6.1 标准链接关系
  118. 6.6.2 扩展链接关系
  119. 6.6.3 嵌入链接关系
  120. 6.6.4 注册链接关系
  121. 6.7 问题跟踪域中的媒体类型
  122. 6.7.1 list资源
  123. 6.7.2 item资源
  124. 6.7.3 discovery资源
  125. 6.7.4 search资源
  126. 6.8 小结
  127. 第7章 构建API  
  128. 7.1 设计
  129. 7.2 获得源代码
  130. 7.3 使用行为驱动开发构建实现
  131. 7.4 浏览解决方案
  132. 7.5 软件包和程序库
  133. 7.6 自托管
  134. 7.7 模型和服务
  135. 7.7.1 问题和问题库
  136. 7.7.2 IssueState 
  137. 7.7.3 IssuesState  
  138. 7.7.4 Link 
  139. 7.7.5 LinkeStateFactory  
  140. 7.7.6 LinkFactory  
  141. 7.7.7 IssueLinkFactory  
  142. 7.8 验收标准
  143. 7.9 功能:获取问题
  144. 7.9.1 获取一个问题
  145. 7.9.2 获取未关闭的和已关闭的问题
  146. 7.9.3 获取不存在的问题
  147. 7.9.4 获取所有问题
  148. 7.9.5 获取所有问题的Collection+Json表示  
  149. 7.9.6 搜索问题
  150. 7.10 功能:创建问题
  151. 7.11 功能:更新问题
  152. 7.11.1 更新一个问题
  153. 7.11.2 更新不存在的问题
  154. 7.12 功能:删除问题
  155. 7.12.1 删除一个问题
  156. 7.12.2 删除不存在的问题
  157. 7.13 功能:处理问题
  158. 7.13.1 测试
  159. 7.13.2 实现
  160. 7.14 小结
  161. 第8章 改进API  
  162. 8.1 新功能的验收标准
  163. 8.2 实现输出缓存支持
  164. 8.3 添加输出缓存测试
  165. 8.4 实现缓存重验证
  166. 8.5 为缓存重验证实现条件GET  
  167. 8.6 冲突检测
  168. 8.7 实现冲突检测
  169. 8.8 变更审计
  170. 8.9 使用Hawk认证实现变更审计
  171. 8.10 跟踪
  172. 8.11 实现跟踪
  173. 8.12 小结
  174. 第9章 构建客户端
  175. 9.1 客户端程序库
  176. 9.1.1 封装库
  177. 9.1.2 链接用作函数
  178. 9.2 应用程序工作流
  179. 9.2.1 用户需知
  180. 9.2.2 带有使命的客户端
  181. 9.2.3 客户端状态
  182. 9.3 小结
  183. 第三部分 Web API细节
  184. 第10章 HTTP编程模型
  185. 10.1 消息
  186. 10.2 标头
  187. 10.3 消息内容
  188. 10.3.1 使用消息内容
  189. 10.3.2 创建消息内容
  190. 10.4 小结
  191. 第11章 托管
  192. 11.1 Web托管
  193. 11.1.1 ASP.NET基础结构
  194. 11.1.2 ASP.NET路由
  195. 11.1.3 Web API路由
  196. 11.1.4 全局配置
  197. 11.1.5 Web API ASP.NET处理程序
  198. 11.2 自托管
  199. 11.2.1 WCF架构
  200. 11.2.2 HttpSelfHostServer类
  201. 11.2.3 HttpSelfHostConfiguration类
  202. 11.2.4 URL预留和访问控制
  203. 11.3 用OWIN和Katana托管Web API  
  204. 11.3.1 OWIN  
  205. 11.3.2 Katana项目
  206. 11.3.3 Web API配置
  207. 11.3.4 Web API中间件
  208. 11.3.5 OWIN生态环境
  209. 11.4 内存托管
  210. 11.5 Azure Service Bus Host  
  211. 11.6 小结
  212. 第12章 控制器和路由
  213. 12.1 HTTP消息流概览
  214. 12.2 消息处理程序管道
  215. 12.2.1 分发程序
  216. 12.2.2 HttpControllerDispatcher  
  217. 12.2.3 控制器选择
  218. 12.2.4 控制器激活
  219. 12.3 控制器管道
  220. 12.3.1 ApiController  
  221. 12.3.2 ApiController处理模型
  222. 12.4 小结
  223. 第13章 格式化程序和模型绑定
  224. 13.1 ASP.NET Web API中模型的重要性
  225. 13.2 模型绑定如何工作
  226. 13.3 内建的模型绑定器
  227. 13.3.1 ModelBindingParameterBinder   
  228. 13.3.2 值提供程序
  229. 13.3.3 模型绑定器
  230. 13.3.4 只对URI进行模型绑定
  231. 13.3.5 FormatterParameterBinder实现   
  232. 13.3.6 HttpParameterBinding的默认选择   
  233. 13.4 模型验证
  234. 13.4.1 将数据标记属性用于模型
  235. 13.4.2 查询验证结果
  236. 13.5 小结
  237. 第14章 HttpClient  
  238. 14.1 HttpClient类
  239. 14.1.1 生存周期
  240. 14.1.2 封装类
  241. 14.1.3 多个实例
  242. 14.1.4 线程安全
  243. 14.1.5 辅助方法
  244. 14.1.6 抽丝剥茧
  245. 14.1.7 完成的请求无异常
  246. 14.1.8 内容为王
  247. 14.1.9 取消请求
  248. 14.1.10 SendAsync  
  249. 14.2 客户端消息处理程序
  250. 14.2.1 代理处理程序
  251. 14.2.2 伪响应处理程序
  252. 14.2.3 创建可以重用的响应处理程序
  253. 14.3 小结
  254. 第15章 安全
  255. 15.1 传输安全
  256. 15.2 在ASP.NET Web API中使用TLS  
  257. 15.2.1 IIS 托管时使用TLS  
  258. 15.2.2 自托管时使用TLS 
  259. 15.3 身份验证
  260. 15.3.1 声明模型
  261. 15.3.2 获取和设置当前用户对象
  262. 15.3.3 基于传输的身份验证
  263. 15.3.4 服务器身份验证
  264. 15.3.5 客户端身份验证
  265. 15.3.6 HTTP身份验证框架
  266. 15.3.7 实现基于HTTP的身份验证
  267. 15.3.8 Katana身份验证中间件
  268. 15.3.9 主动和被动的身份验证中间件
  269. 15.3.10 Web API身份验证筛选器
  270. 15.3.11 基于令牌的身份验证
  271. 15.3.12 Hawk身份验证方案
  272. 15.4 授权
  273. 15.4.1 授权执行
  274. 15.4.2 跨域资源共享
  275. 15.4.3 ASP.NET Web API的CORS支持
  276. 15.5 小结
  277. 第16章 OAuth 2.0授权框架
  278. 16.1 客户端应用程序
  279. 16.2 访问受保护资源
  280. 16.3 获得访问令牌
  281. 16.4 授权码授予
  282. 16.5 范围
  283. 16.6 前通道与后通道
  284. 16.7 刷新令牌
  285. 16.8 资源服务器和授权服务器
  286. 16.9 在ASP.NET Web API中处理访问令牌   
  287. 16.10 OAuth 2.0与身份验证
  288. 16.11 基于范围的授权
  289. 16.12 小结
  290. 第17章 可测试性
  291. 17.1 单元测试
  292. 17.1.1 使用测试框架
  293. 17.1.2 Visual Studio单元测试入门
  294. 17.1.3 xUnit.NET  
  295. 17.1.4 单元测试在测试驱动开发中的作用
  296. 17.2 对ASP.NET Web API实现进行单元测试   
  297. 17.2.1 测试ApiController 
  298. 17.2.2 测试MediaTypeFormmater 
  299. 17.2.3 单元测试HttpMessageHandler  
  300. 17.2.4 测试ActionFilterAttribute  
  301. 17.3 对路由进行单元测试
  302. 17.4 ASP.NET Web API的集成测试
  303. 17.5 小结
  304. 附录A 媒体类型
  305. 附录B HTTP标头
  306. 附录C 内容协商
  307. 附录D 缓存实战
  308. 附录E 身份验证工作流
  309. 附录F application/issue+json媒体类型规范  
  310. 附录G 公钥加密和证书
书名:ASP.NET Web API设计
译者:金迎 译
国内出版社:人民邮电出版社
出版时间:2015年01月
页数:456
书号:978-7-115-37772-2
原版书书名:Designing Evolvable Web APIs with ASP.NET
原版书出版商:O'Reilly Media
Glenn Block
 
Glenn Block曾任职微软,推动了ASP.NET Web API早期版本的开发。
 
 
Pablo Cibraro
 
Pablo Cibraro拥有十余年使用微软技术设计和实现大型分布式系统的经验。
 
 
Pedro Félix
 
Pedro Félix是一位软件工程师和教授,研究方向为基础设施实现、用户身份管理,以及访问控制。
 
 
Howard Dierking
 
Howard Dierking是微软ASP.NET Web API团队的产品经理,当前的工作重点包括NuGet和Katana项目。
 
 
Darrel Miller
 
Darrel Miller是Tavis软件公司的创始人之一,帮助人们学习如何在业务应用中采用REST架构风格。