《SOA Web Service契約設計與版本化》是ThomasErl所作的一部圖書,該書首先簡要回顧了SOA與面向服務的基本概念和關鍵目標,然後著重闡述了與Web服務契約的設計和演化相關的各種話題。主要內容包括WSDL、SOAP、XMLSchema、WS-Policy以及訊息設計的相關技術(SOAP和WS-Addressing)。
基本介紹
- 書名:SOAWebService契約設計與版本化
- 作者:ThomasErl
- 譯者:郭耀
- ISBN:9787115218193
- 定價:89.00 元
- 出版社:人民郵電出版社
- 出版時間:2010年01月
- 開本:16開
內容簡介,編輯推薦,作者簡介,圖書目錄,
內容簡介
本書著重在SOA的上下文中論述Web服務契約技術,並且介紹了可以用於契約設計和版本化的各種設計模式。本書同時還提供了許多代碼示例,可以幫助讀者從實際案例中掌握如何在實踐中運用相關的技術和原則。通過閱讀本書,讀者不僅可以學到在SOA中Web服務契約設計與版本化的基本技術,並且可以深入理解如何構建Web服務契約來支持面向服務。
本書作者包括了來自SOA、Web服務技術、服務契約設計以及服務版本化和治理等領域的頂級專家學者。其中主要作者Thomas Erl是業界公認的SOA領袖,本書以及他的其他著作被許多著名跨國公司的資深專家譽為“必備的SOA參考書”。
本書的讀者對象是對面向服務架構、Web服務技術和服務契約版本化感興趣的IT開發人員、分析師與架構師。
編輯推薦
《SOA Web Service契約設計與版本化》:Web Service要想成功地成為SOA的一部分,它們就需要平衡而有效的技術契約來支持服務的演化,並且在未來許多年可以被多次復用。現在,由全球最暢銷的SOA作者與業界頂尖專家組成的團隊為我們呈現了關於支持SOA的Web Service契約設計與治理的第一本全面指南。
《SOA Web Service契約設計與版本化》包括以下內容:
Web Service契約結構與命名空間的形象講解;
版本化技術與策略;
採用WSDL的契約設計;
XML Sctlema訊息設計;
WS-Policy設計;
採用SOAP和WS-Addressirlg的訊息設計;
Web Service契約和SOA。
作者簡介
俄爾(Thomas Erl),是世界上最暢銷的SOA圖書的作者,也是Prentice Hall出版的“Thomas Erl面向服務計算系列”叢書的系列編輯,同時還是SOA雜誌的編輯。他的書在全世界印刷了超過十萬冊,並且得到了很多大型軟體組織資深成員的認可,其中包括IBM、Microsoft、Oracle、BEA、Sun、Intel、SAP和HP。
在他出版了該叢書的前3本,也就是Service-Oriented Architecture:A Field Guide to Integrating XML and Web Services、Service-Oriented Architecture:Concepts,Technology,and Design(中譯版《SOA概念技術與設計》)和SOA:Principles of Service Design(中譯版《SOA服務設計原則》)之後,又與多位業界知名專家合著了最新的兩本書:SOA Design Patterns 與該書。
圖書目錄
目 錄
第1章 概述 1
1.1 關於本書 2
1.2 本書的目標 3
1.3 讀者對象 3
1.4 本書不涉及的內容 3
1.5 必備知識閱讀 4
1.6 補充閱讀 4
1.7 本書的組織結構 5
1.7.1 第1部分:基本服務契約設計 5
1.7.2 第2部分:高級服務契約設計 7
1.7.3 第3部分:服務契約版本化 8
1.7.4 第4部分:附錄 9
1.8 符號、圖形和風格約定 9
1.8.1 符號圖例 9
1.8.2 突出顯示的代碼 10
1.8.3 要點總結 10
1.9 附加說明 10
1.9.1 本叢書官方站點 10
1.9.2 Visio模板 10
1.9.3 社區模式站點 10
1.9.4 主術語表 10
1.9.5 參考規範 10
1.9.6 補充的張貼圖 10
1.9.7 SOA雜誌 11
1.9.8 通知服務 11
第2章 案例研究背景 12
2.1 案例研究示例的使用 13
2.2 案例研究背景:ActionCon公司 13
2.2.1 歷史和文化 13
2.2.2 技術基礎設施 13
2.2.3 商業目標和挑戰 14
第1部分 基本服務契約設計
第3章 SOA基礎和Web服務契約 16
3.1 基本的SOA術語 17
3.1.1 面向服務計算 17
3.1.2 面向服務 17
3.1.3 面向服務架構 18
3.1.4 服務 19
3.1.5 服務模型 20
3.1.6 服務組合 20
3.1.7 服務庫存 21
3.1.8 面向服務分析 22
3.1.9 服務候選 22
3.1.10 面向服務設計 22
3.1.11 Web服務 23
3.1.12 服務契約 24
3.1.13 服務相關的粒度 24
3.1.14 進一步閱讀 25
3.2 面向服務計算的目標和Web服務契約 25
3.2.1 內在互操作性的提高 26
3.2.2 聯合的增強 26
3.2.3 廠商多樣性選擇的增加 26
3.2.4 業務和技術領域一致性的提高 26
3.2.5 策略性的好處 26
3.2.6 進一步閱讀 26
3.3 面向服務和Web服務契約 27
3.3.1 標準化服務契約 28
3.3.2 服務鬆散耦合 28
3.3.3 服務抽象 29
3.3.4 服務可復用性 30
3.3.5 服務可發現性 30
3.3.6 服務可組合性 30
3.3.7 進一步閱讀 30
3.4 SOA設計模式與Web服務契約 30
第4章 Web服務契約剖析 33
4.1 Web服務契約是什麼 34
4.1.1 基本結構 34
4.1.2 抽象與具體描述 35
4.2 Web服務契約的組成部分 36
4.2.1 抽象描述的主要組成部分 36
4.2.2 抽象描述的一個物理視圖 38
4.2.3 具體描述的主要組成部分(一) 39
4.2.4 具體描述的主要組成部分(二) 40
4.2.5 契約組成部分之間的關係 41
4.2.6 訊息的主要組成部分 43
4.3 Web服務契約的創建技術 44
4.3.1 Web服務描述語言 45
4.3.2 XML模式定義語言 46
4.3.3 WS-Policy語言 48
4.3.4 SOAP語言 48
4.3.5 抽象描述的技術 49
4.3.6 具體描述的技術 50
4.3.7 WS-I Basic Profile 51
4.4 使用Web服務契約技術的指導原則 52
4.4.1 自動生成工具 52
4.4.2 靈活性vs. 限制性 53
4.4.3 模組化和復用 53
4.4.4 清晰度和易於處理 54
第5章 關於命名空間的簡明指南 55
5.1 元素、屬性與命名空間 56
5.1.1 命名空間和元素 57
5.1.2 命名空間和屬性 60
5.1.3 使用命名空間 61
5.2 命名空間術語表 62
5.2.1 局部名稱 62
5.2.2 擴展名稱 62
5.2.3 命名空間前綴 62
5.2.4 默認命名空間 63
5.2.5 受限名稱 63
5.2.6 目標命名空間 63
5.3 命名空間的結構 64
5.3.1 業界標準命名空間 66
5.3.2 命名空間與URL編碼 67
5.3.3 命名空間與實際URL 68
5.4 命名空間語法 69
5.4.1 聲明一個命名空間前綴 70
5.4.2 默認命名空間 73
5.4.3 沒有命名空間 74
5.5 命名空間與Web服務契約 76
5.5.1 Web服務契約中的常見命名空間 77
5.5.2 訊息中的常見命名空間 78
5.5.3 本書中使用的命名空間 79
第6章 基本XML Schema:類型和訊息結構基礎 80
6.1 XML模式的結構 83
6.2 元素和屬性 84
6.2.1 元素與類型 85
6.2.2 元素與屬性 85
6.2.3 全局與局部聲明 87
6.2.4 元素粒度 88
6.3 類型 89
6.3.1 什麼是內容模型 89
6.3.2 命名類型與匿名類型 89
6.3.3 內置的簡單類型 90
6.3.4 類型與繼承 91
6.3.5 用戶定義的簡單類型 91
6.3.6 複合類型 94
6.3.7 在Web服務契約中如何使用類型 97
6.4 命名空間 98
6.4.1 目標命名空間 99
6.4.2 受限的與非受限的元素 102
6.4.3 命名空間與模式復用 104
6.5 訊息結構 107
第7章 基本WSDL(一):抽象描述設計 117
7.1 WSDL定義和文檔 118
7.1.1 definitions元素 118
7.1.2 documentation元素 121
7.2 抽象描述結構 122
7.3 類型定義 123
7.4 訊息定義 127
7.4.1 message元素 127
7.4.2 part元素 128
7.5 操作定義 131
7.5.1 operation元素 131
7.5.2 訊息交換模式 131
7.5.3 parameterOrder屬性 132
7.5.4 操作重載 133
7.6 連線埠類型定義 134
7.7 一個完整的抽象描述 135
第8章 基本WSDL(二):具體描述設計 138
8.1 具體描述結構 139
8.2 綁定定義 139
8.2.1 binding元素 140
8.2.2 可擴展性元素 141
8.2.3 binding元素的transport屬性 142
8.2.4 “繼承規則” 142
8.2.5 soap11:operation元素的soapAction屬性 142
8.2.6 soap11:binding與operation元素的style屬性 143
8.2.7 SOAP可擴展性元素(和use屬性) 146
8.2.8 Literal vs. Encoded 146
8.2.9 綁定到SOAP 1.2 149
8.3 服務和連線埠定義 151
8.4 一個完整的WSDL定義(包含具體描述) 154
第9章 基本WSDL 2.0:新特性與設計選項 159
9.1 WSDL 2.0文檔結構 160
9.2 接口定義 160
9.2.1 interface元素的extends屬性 161
9.2.2 interface元素的styleDefault屬性 162
9.2.3 wsdlx:safe全局屬性 162
9.2.4 fault、infault和outfault元素 163
9.2.5 pattern和messageLabel屬性 165
9.3 服務與端點定義 166
9.4 一個完整的WSDL 2.0定義 166
第10章 基本WS-Policy:斷言、表達式與附加項 170
10.1 策略結構 171
10.1.1 新的命名空間與前綴 172
10.1.2 斷言、表達式與Policy元素 172
10.2 組合策略 175
10.2.1 ExactlyOne元素 175
10.2.2 wsp:All元素 176
10.2.3 wsp:optional屬性 176
10.3 操作符組合規則 177
10.3.1 冪等性規則 178
10.3.2 交換性規則 178
10.3.3 結合性規則 179
10.3.4 wsp:All對wsp:ExactlyOne的分配性 179
10.3.5 空操作符 181
10.3.6 等價 181
10.4 把策略附加到WSDL定義之上 182
10.4.1 策略附加點與策略主題 182
10.4.2 wsp:PolicyReference元素 186
10.4.3 嵌入的附加項 187
10.5 帶有附加策略表達式的一個完整WSDL定義 188
第11章 基本訊息設計:SOAP信封結構、故障訊息與報頭處理 193
11.1 SOAP訊息結構 195
11.1.1 soap:Envelope元素 196
11.1.2 soap:Body元素 196
11.1.3 soap:Header元素 197
11.1.4 soap:Fault元素 198
11.2 SOAP節點與角色 198
11.3 SOAP報頭塊與指定目標處理 200
11.3.1 soap:role屬性 201
11.3.2 soap:mustUnderstand屬性 204
11.3.3 soap:relay屬性 206
11.3.4 業界SOAP報頭塊示例 206
11.4 SOAP中介 208
11.4.1 轉發中介 209
11.4.2 主動中介 210
11.5 故障訊息 211
11.5.1 SOAP故障辭彙表 211
11.5.2 soap:Code元素 212
11.5.3 soap:Detail元素 216
11.5.4 SOAP故障vs. WSDL故障 216
11.5.5 SOAP 1.1故障元素與取值 217
第2部分 高級服務契約設計
第12章 高級XML Schema(一):訊息靈活性、類型繼承與組合 220
12.1 訊息靈活性與約束粒度 221
12.1.1 通配符(xsd:any和xsd:anyAttribute) 221
12.1.2 擴展桶 225
12.1.3 通用元素與特殊元素 227
12.1.4 內容模型分組(xsd:choice、xsd:all與 xsd:sequence) 230
12.2 類型繼承與組合 233
12.2.1 效仿類繼承(抽象與xsd:extension) 233
12.2.2 類型組合(xsd:group) 238
12.3 常見的CRUD訊息類型 240
12.3.1 “饒舌”因素 241
12.3.2 “無關”因素 242
12.3.3 常見訊息類型 242
12.3.4 Add操作訊息 245
12.3.5 Get操作訊息 245
12.3.6 文檔為中心的Update操作訊息 246
12.3.7 參數為中心的Update操作訊息 247
12.3.8 Delete操作訊息 249
12.3.9 任務服務的訊息類型 249
第13章 高級XML Schema(二):可復用性、關係設計與業界模式 250
13.1 可復用模式設計 251
13.1.1 使用xsd:include元素來復用模式 251
13.1.2 使用xsd:import元素來復用模式 256
13.2 在XML模式中表示關係 263
13.2.1 xsd:key與xsd:keyref元素 265
13.2.2 單獨的關係元素 267
13.3 敘述性內容 269
13.4 採用產業模式 270
13.4.1 類型復用 271
13.4.2 添加通配符 274
第14章 高級WSDL(一):模組化、可擴展性、MEP與異步 282
14.1 模組化機制 283
14.1.1 import元素(WSDL 1.1、WSDL 2.0) 283
14.1.2 include元素(WSDL 2.0) 288
14.1.3 如何合併WSDL文檔 290
14.1.4 導入XML模式 290
14.1.5 關於接口繼承的更多內容(WSDL 2.0) 297
14.2 WSDL語言的擴展 298
14.2.1 SOAP綁定擴展的可擴展性 299
14.2.2 定製的WSDL擴展與wsdl:required屬性 300
14.3 特殊的訊息交換模式 301
14.3.1 關於向外的MEP 301
14.3.2 WSDL 2.0中的Robust In-Only MEP 302
14.3.3 WSDL 2.0中的定製MEP 303
14.4 異步操作設計 305
14.4.1 異步的Web服務 305
14.4.2 輪詢 306
14.4.3 異步協定綁定 307
14.4.4 WS-Addressing 308
14.4.5 使用異步模式的指導原則 311
14.5 WS-BPEL與WSDL 312
14.5.1 WSDL的WS-BPEL擴展 313
14.5.2 異步的訊息交換 313
14.5.3 相關性 314
第15章 高級WSDL(二):訊息分發、服務實例標識與非SOAP的HTTP綁定 317
15.1 WSDL 2.0中的極端鬆散耦合 318
15.1.1 #any屬性 318
15.1.2 合法的#any訊息 318
15.1.3 架構上的考慮 320
15.1.4 WSDL中的#any與XML Schema中的xsd:any 321
15.2 訊息分發的挑戰 321
15.2.1 創建唯一的訊息類型 323
15.2.2 HTTP SOAP動作報頭 324
15.2.3 WS-Addressing的SOAP動作報頭 327
15.3 指向服務實例的訊息 329
15.3.1 服務與服務實例 329
15.3.2 WSDL中的wsdlx與wsdli可擴展性屬性 330
15.3.3 這個功能的套用 332
15.4 定製的報頭塊與報頭故障 332
15.4.1 報頭與報頭故障類型 333
15.4.2 在WSDL 2.0中定義SOAP報頭塊 337
15.5 不使用SOAP綁定到HTTP 337
15.5.1 HTTP作為一種訊息協定 337
15.5.2 使用WSDL 1.1綁定到HTTP 338
15.5.3 使用WSDL 2.0綁定到HTTP 343
15.5.4 WSDL 2.0 HTTP綁定的其他功能 346
第16章 高級WS-Policy(一):策略集中化與嵌套、參數化和可忽略的斷言 347
16.1 可復用性與策略集中化 348
16.1.1 策略集中化與策略定義 348
16.1.2 設計外部的WS-Policy定義 349
16.1.3 策略集中化的常見挑戰 355
16.2 嵌套的和參數化的斷言 356
16.2.1 嵌套的策略斷言 356
16.2.2 參數化的斷言 357
16.3 可忽略的斷言 362
16.3.1 wsp:Ignorable與wsp:Optional 362
16.3.2 使用wsp:Ignorable來指定消費者 364
16.3.3 使用可忽略斷言的注意事項 365
16.4 支持並發策略的契約 366
第17章 高級WS-Policy(二):定製策略斷言設計、運行時表示與兼容性 371
17.1 定製的策略斷言設計 372
17.1.1 定製斷言模式 372
17.1.2 定製斷言的處理邏輯 374
17.1.3 定製斷言的屬性 379
17.1.4 定製策略斷言的設計考慮清單 380
17.2 定製策略斷言的維護 381
17.2.1 規範策略辭彙表 381
17.2.2 斷言描述文檔 382
17.3 運行時策略表示 383
17.3.1 策略規範化 383
17.3.2 合併策略 386
17.4 交集與消費者-服務間的策略兼容性 390
17.4.1 兼容性的層次 390
17.4.2 斷言兼容性 391
17.4.3 可替代項的兼容性 391
第18章 高級訊息設計(一):WS-Addressing辭彙表 394
18.1 EPR與MAP 396
18.1.1 端點引用 396
18.1.2 訊息定址屬性 397
18.2 EPR辭彙表 399
18.2.1 wsa:EndpointReference元素 399
18.2.2 wsa:Address元素 399
18.2.3 wsa:ReferenceParameters元素 400
18.2.4 wsa:Metadata元素 401
18.3 MAP辭彙表 402
18.3.1 wsa:To元素 403
18.3.2 wsa:From元素 403
18.3.3 wsa:ReplyTo元素 404
18.3.4 wsa:FaultTo元素 404
18.3.5 wsa:Action元素 405
18.3.6 wsa:MessageId元素 405
18.3.7 wsa:RelatesTo元素與RelationshipType屬性 405
第19章 高級訊息設計(二):WS-Addressing規則與設計技巧 408
19.1 WS-Addressing訊息規則 409
19.1.1 SOAP報頭結構 409
19.1.2 從端點傳送訊息的回答 411
19.1.3 MAP元素的MEP需求 412
19.2 EPR與WSDL綁定 416
19.2.1 在EPR中嵌入WSDL引用 416
19.2.2 在WSDL文檔中嵌入EPR 418
19.3 WS-Addressing與動作取值 421
19.3.1 為什麼wsa:Action總是必需的 421
19.3.2 wsa:Action元素與WSDL 422
19.3.3 wsa:Action元素與HTTP 423
19.3.4 動作取值的一個簡表 424
19.4 WS-Addressing SOAP故障 424
19.5 WS-Addressing策略斷言 425
19.5.1 wsam:Addressing策略斷言 425
19.5.2 wsam:AnonymousResponse策略斷言 425
19.5.3 wsam:NonAnonymousResponse策略斷言 426
第3部分 服務契約版本化
第20章 版本化基礎 430
20.1 基本概念與術語 431
20.1.1 版本的範圍 431
20.1.2 細粒度與粗粒度的約束 432
20.2 版本化與兼容性 433
20.2.1 向後兼容 433
20.2.2 向前兼容 434
20.2.3 兼容的改動 435
20.2.4 不兼容的改動 436
20.3 版本標識符 437
20.4 版本化策略 439
20.4.1 嚴格的策略(新改動、新契約) 439
20.4.2 靈活策略(向後兼容) 440
20.4.3 寬鬆策略(向後與向前兼容) 440
20.4.4 總結表格 441
第21章 WSDL定義的版本化 442
21.1 版本標識符與WSDL定義 443
21.2 操作定義的版本化 445
21.2.1 添加新的操作 446
21.2.2 重命名現有操作 448
21.2.3 刪除一個現有操作 452
21.2.4 修改一個現有操作的MEP 456
21.2.5 向現有操作中添加一個故障訊息 459
21.3 連線埠類型定義的版本化 462
21.3.1 向連線埠類型中添加一個版本標識符 462
21.3.2 多個連線埠類型的版本化(靈活策略) 463
21.3.3 使用前綴來關聯版本 465
21.4 具體描述的版本化 468
21.5 WSDL定義與向前兼容 470
21.5.1 降低操作粒度級別 470
21.5.2 使用WSDL 2.0中的#any屬性值 471
第22章 訊息模式的版本化 474
22.1 基本術語與概念 475
22.1.1 “構件”概念的重新引入 475
22.1.2 內容集合 475
22.1.3 版本化與UPA規則 476
22.1.4 基本示例 477
22.2 XML Schema與WSDL目標命名空間 479
22.3 嚴格的版本化策略 479
22.3.1 添加新的模式構件 480
22.3.2 刪除現有模式構件 480
22.3.3 重命名現有模式構件 481
22.3.4 修改現有模式構件的約束 481
22.4 靈活的模式版本化(使用可選構件) 482
22.4.1 添加新的模式構件 482
22.4.2 刪除一個現有模式構件 484
22.4.3 重命名一個現有模式構件 485
22.4.4 修改現有模式構件的約束 485
22.5 寬鬆的模式版本化(使用通配符) 488
22.5.1 添加一個新的模式構件 488
22.5.2 刪除一個現有模式構件 491
22.5.3 重命名一個現有模式構件 493
22.5.4 修改現有模式構件的約束 493
第23章 高級版本化 497
23.1 策略的版本化 498
23.1.1 可替代項 498
23.1.2 可選斷言 499
23.1.3 可忽略斷言 499
23.1.4 不同的端點 500
23.1.5 把主要版本變動傳播到WSDL定義 501
23.2 定義“不能忽略的”未知元素 502
23.2.1 使用定製的mustUnderstand屬性 502
23.2.2 使用soap:mustUnderstand屬性 503
23.3 版本化與模式集中化 504
23.4 終止信息的表示 505
23.4.1 可忽略的終止斷言 506
23.4.2 強制的終止斷言 507
23.4.3 終止單個操作 508
23.5 使用未知內容 510
23.5.1 接受並保留未知內容 510
23.5.2 使用mustRetain標誌 512
23.6 部分確認 513
23.7 訊息實例的版本化 515
23.8 版本化策略的定製 516
23.8.1 模式版本化的定製策略 517
23.8.2 版本標識約定 517
第4部分 附錄
附錄A 案例研究總結 520
附錄B 技術標準的制定過程 522
B.1 標準是如何開發的 523
B.2 標準開發過程 523
附錄C C偽模式列表 525
附錄D 本書用到的命名空間與前綴 541
附錄E 與本書有關的SOAP設計模式 544
E.1 規範表達 545
E.2 規範模式 546
E.3 規範版本化 546
E.4 兼容改動 546
E.5 並發契約 547
E.6 契約集中化 547
E.7 契約反規範化 547
E.8 分解能力 548
E.9 解耦合的契約 548
E.10 分散式能力 549
E.11 訊息元數據 549
E.12 部分確認 549
E.13 策略集中化 550
E.14 代理能力 550
E.15 模式集中化 550
E.16 服務訊息傳遞 551
E.17 終止通知 551
E.18 確認抽象 552
E.19 版本標識 552
……