第一部分 基础知识 3
第1章 因特网、万维网和HTTP协议 3
1.1 Web体系结构 4
1.1.1资源 5
1.1.2 URI 5
1.1.3酷URI 6
1.1.4表示 6
1.1.5媒体类型 7
1.2 HTTP协议 8
1.2.1 HTTP 1.1之后 9
1.2.2 HTTP消息交换 9
1.2.3中间层 10
1.2.4中间层类型 11
1.2.5 HTTP方法 12
1.2.6标头 15
1.2.7 HTTP状态码 16
1.2.8内容协商 16
1.2.9缓存 16
1.2 10身份验证 19
1.2.11身份验证方案 20
1.2.12附加身份验证方案 20
1.3小结 21
第2章 Web API 22
2.1什么是Web API 22
2.2 SOAP Web服务 22
2.3 Web API的起源 23
2.4 Web API革命开始 23
2.5关注Web 23
2.6 Web API指南 24
2.7特定领域的媒体类型 24
2.8媒体类型档案 25
2.9多个表示 26
2.10 API风格 27
2.10.1 Richardson成熟度模型 28
2.10.2 RPC(RMM第0级) 28
2.10.3资源(RMM第1级) 30
2.10.4 HTTP谓词(RMM第2级) 32
2.10.5以资源为中心的API 34
2.10.6超媒体(RMM第3级) 35
2.10.7 REST 39
2.10.8 REST约束 39
2.11小结 41
第3章 ASP.NETWeb API 101 42
3.1核心场景 42
3.1.1第一类HTTP编程 43
3.1.2对称的客户端和服务器编程体验 44
3.1.3对不同格式的灵活支持 45
3.1.4告别“尖括号编码” 45
3.1.5支持单元测试 45
3.1.6多种托管选项 46
3.2 ASP.NET Web API入门 46
3.3新建Web API项目 50
3.3.1 WebApiConfig 50
3.3.2 ValuesController 52
3.4 “Hello Web API!” 53
3.4.1创建服务 53
3.4.2客户端 60
3.4.3宿主 60
3.5小结 61
第4章 处理架构 62
4.1托管层 64
4.2消息处理程序管道 65
4.3控制器处理 69
4.4小结 75
第二部分 真实世界的API开发 79
第5章 应用程序 79
5.1为什么要可演化 80
5.1.1演化的障碍 81
5.1.2代价是什么 81
5.1.3为什么不创建新版本 83
5.1.4付诸实践 86
5.2应用程序目标 86
5.2.1目标 86
5.2.2机会 87
5.3信息模型 87
5.3.1子域 88
5.3.2相关资源 88
5.3.3属性组 89
5.3.4属性组的集合 90
5.3.5信息模型与媒体类型 90
5.3.6问题集合 91
5.4资源模型 92
5.4.1根资源 92
5.4.2搜索资源 92
5.4.3集合资源 92
5.4.4个体资源 93
5.5小结 95
第6章 媒体类型选择与设计 96
6.1自描述 96
6.2协议类型 97
6.3媒体类型 97
6.3.1原始格式 97
6.3.2流行格式 99
6.3.3新格式 100
6.3.4超媒体类型 102
6.3.5媒体类型爆炸 102
6.3.6通用媒体类型和档案 102
6.3.7其他超媒体类型 106
6.4链接关系类型 107
6.4.1语义 107
6.4.2替换嵌入资源 109
6.4.3间接层 109
6.4.4引用数据 110
6.4.5工作流 111
6.4.6语法 112
6.4.7完美结合 114
6.5设计新的媒体类型协议 114
6.5.1选择格式 115
6.5.2支持超媒体 116
6.5.3可选、强制、省略和适用 116
6.5.4嵌入元数据和外部元数据 117
6.5.5可扩展性 117
6.5.6注册媒体类型 119
6.6设计新的链接关系 119
6.6.1标准链接关系 119
6.6.2扩展链接关系 120
6.6.3嵌入链接关系 121
6.6.4注册链接关系 121
6.7问题跟踪域中的媒体类型 121
6.7.1 list资源 122
6.7.2 item资源 123
6.7.3 discovery资源 124
6.7.4 search资源 125
6.8小结 125
第7章 构建API 126
7.1设计 126
7.2获得源代码 127
7.3使用行为驱动开发构建实现 127
7.4浏览解决方案 127
7.5软件包和程序库 128
7.6自托管 128
7.7模型和服务 130
7.7.1问题和问题库 130
7.7.2IssueState 130
7.7.3IssuesState 131
7.7.4 Link 133
7.7.5 LinkeStateFactory 133
7.7.6 LinkFactory 134
7.7.7IssueLinkFactory 135
7.8验收标准 136
7.9功能:获取问题 139
7.9.1获取一个问题 142
7.9.2获取未关闭的和已关闭的问题 144
7.9.3获取不存在的问题 146
7.9.4获取所有问题 147
7.9.5获取所有问题的Collection+Json表示 150
7.9.6搜索问题 152
7.10功能:创建问题 153
7.11功能:更新问题 156
7.11.1更新一个问题 156
7.11.2更新不存在的问题 158
7.12功能:删除问题 159
7.12.1删除一个问题 159
7.12.2删除不存在的问题 160
7.13功能:处理问题 161
7.13.1测试 161
7.13.2实现 161
7.14小结 163
第8章 改进API 164
8.1新功能的验收标准 164
8.2实现输出缓存支持 166
8.3添加输出缓存测试 167
8.4实现缓存重验证 169
8.5为缓存重验证实现条件GET 170
8.6冲突检测 173
8.7实现冲突检测 174
8.8变更审计 176
8.9使用Hawk认证实现变更审计 177
8.10跟踪 181
8.11实现跟踪 182
8.12小结 184
第9章 构建客户端 185
9.1客户端程序库 186
9.1.1封装库 186
9.1.2链接用作函数 189
9.2应用程序工作流 194
9.2.1用户需知 195
9.2.2带有使命的客户端 198
9.2.3客户端状态 201
9.3小结 201
第三部分 Web API细节 205
第10章 HTTP编程模型 205
10.1消息 206
10.2标头 210
10.3消息内容 215
10.3.1使用消息内容 216
10.3.2创建消息内容 218
10.4小结 226
第11章 托管 227
11.1 Web托管 228
11.1.1 ASP. NET基础结构 228
11.1.2 ASP.NET路由 230
11.1.3 Web API路由 232
11.1.4全局配置 234
11.1.5 Web API ASP.NET处理程序 235
11.2自托管 238
11.2.1 WCF架构 238
11.2.2 HttpSelfHostServer类 240
11.2.3 HttpSelfHostConfiguration类 241
11.2.4 URL预留和访问控制 242
11.3用OWIN和Katana托管Web API 243
11.3.1 OWIN 244
11.3.2 Katana项目 245
11.3.3 Web API配置 247
11.3.4 Web API中间件 248
11.3.5 OWIN生态环境 250
11.4内存托管 250
11.5 Azure Service Bus Host 252
11.6小结 256
第12章 控制器和路由 257
12.1 HTTP消息流概览 257
12.2消息处理程序管道 258
12.2.1分发程序 262
12.2.2 HttpControllerDispatcher 263
12.2.3控制器选择 263
12.2.4控制器激活 266
12.3控制器管道 267
12.3.1 ApiController 267
12.3.2 ApiController处理模型 268
12.4小结 279
第13章 格式化程序和模型绑定 280
13.1 ASP.NET Web API中模型的重要性 280
13.2模型绑定如何工作 281
13.3内建的模型绑定器 284
13.3.1 ModelBindingParameterBinder 284
13.3.2值提供程序 285
13.3.3模型绑定器 288
13.3.4只对URI进行模型绑定 290
13.3.5 FormatterParameterBinder实现 291
13.3.6 HttpParameterBinding的默认选择 296
13.4模型验证 296
13.4.1将数据标记属性用于模型 296
13.4.2查询验证结果 297
13.5小结 299
第14章 Http Client 300
14.1 HttpClient类 300
14.1.1生存周期 301
14.1.2封装类 301
14.1.3多个实例 302
14.1.4线程安全 302
14.1.5辅助方法 302
14.1.6抽丝剥茧 303
14.1.7完成的请求无异常 303
14.1.8 内容为王 303
14.1.9取消请求 304
14.1.10 SendAsync 305
14.2客户端消息处理程序 306
14.2.1代理处理程序 308
14.2.2伪响应处理程序 309
14.2.3创建可以重用的响应处理程序 310
14.3小结 311
第15章 安全 312
15.1传输安全 312
15.2在ASP.NET Web API中使用TLS 314
15.2.1 IIS托管时使用TLS 314
15.2.2自托管时使用TLS 316
15.3身份验证 316
15.3.1声明模型 317
15.3.2获取和设置当前用户对象 321
15.3.3基于传输的身份验证 321
15.3.4服务器身份验证 322
15.3.5客户端身份验证 325
15.3.6 HTTP身份验证框架 331
15.3.7实现基于HTTP的身份验证 333
15.3.8 Katana身份验证中间件 334
15.3.9主动和被动的身份验证中间件 338
15.3.10 Web API身份验证筛选器 339
15.3.11基于令牌的身份验证 342
15.3.12 Hawk身份验证方案 348
15.4授权 350
15.4.1授权执行 351
15.4.2跨域资源共享 354
15.4.3 ASP.NET Web API的CORS支持 357
15.5小结 359
第16章 OAuth 2.0授权框架 360
16.1客户端应用程序 362
16.2访问受保护资源 364
16.3获得访问令牌 365
16.4授权码授予 367
16.5范围 369
16.6前通道与后通道 370
16.7刷新令牌 371
16.8资源服务器和授权服务器 372
16.9在ASP.NET Web API中处理访问令牌 373
16.10 OAuth 2.0与身份验证 375
16.11基于范围的授权 378
16.12小结 379
第17章 可测试性 380
17.1单元测试 380
17.1.1使用测试框架 381
17.1.2 Visual Studio单元测试入门 381
17.1.3 xUnit.NET 383
17.1.4单元测试在测试驱动开发中的作用 384
17.2对ASP.NET Web API实现进行单元测试 387
17.2.1测试ApiController 387
17.2.2测试MediaTypeFormmater 393
17.2.3单元测试Http MessageHandler 396
17.2.4 测试ActionFilterAttribute 397
17.3对路由进行单元测试 401
17.4 ASP.NET Web API的集成测试 402
17.5小结 404
附录A媒体类型 405
附录B HTTP标头 406
附录C内容协商 409
附录D缓存实战 413
附录E身份验证工作流 417
附录F application/issue+j son媒体类型规范 420
附录G公钥加密和证书 422