本書(shū)結(jié)合豐富的實(shí)例,詳細(xì)講解了Web API的設(shè)計(jì)、開(kāi)發(fā)與運(yùn)維相關(guān)的知識(shí)。第1章介紹Web API的概要;第2章詳述端點(diǎn)的設(shè)計(jì)與請(qǐng)求的形式;第3章介紹響應(yīng)數(shù)據(jù)的設(shè)計(jì);第4章介紹如何充分利用HTTP協(xié)議規(guī)范;第5章介紹如何開(kāi)發(fā)方便更改設(shè)計(jì)的Web API;第6章介紹如何開(kāi)發(fā)牢固的Web API。
目 錄
譯者序 xi
前言 xv
第1章 什么是Web API 1
1.1 Web API的重要性 3
1.1.1 通過(guò)API才能使用的在線服務(wù)出現(xiàn) 5
1.1.2 移動(dòng)應(yīng)用與API 7
1.1.3 API的經(jīng)濟(jì)學(xué) 7
1.2 各種各樣的API模式 8
1.2.1 將已發(fā)布的Web在線服務(wù)的數(shù)據(jù)或功能通過(guò)API公開(kāi) 8
1.2.2 將附加在其他網(wǎng)頁(yè)上的微件公開(kāi) 9
1.2.3 構(gòu)建現(xiàn)代Web應(yīng)用 10
1.2.4 開(kāi)發(fā)智能手機(jī)應(yīng)用 11
1.2.5 開(kāi)發(fā)社交游戲 11
1.2.6 公司內(nèi)部多個(gè)系統(tǒng)的集成 12
1.3 應(yīng)該通過(guò)API公開(kāi)什么 12
1.3.1 公開(kāi)API是否會(huì)帶來(lái)風(fēng)險(xiǎn) 13
1.3.2 公開(kāi)API能得到什么 14
1.4 設(shè)計(jì)優(yōu)美的Web API的重要性 15
1.4.1 設(shè)計(jì)優(yōu)美的Web API易于使用 15
1.4.2 設(shè)計(jì)優(yōu)美的Web API便于更改 16
1.4.3 設(shè)計(jì)優(yōu)美的Web API健壯性好 16
1.4.4 設(shè)計(jì)優(yōu)美的Web API不怕公之于眾 16
1.5 如何美化Web API 17
1.6 REST與Web API 18
1.7 作為目標(biāo)對(duì)象的開(kāi)發(fā)人員數(shù)量與API的設(shè)計(jì)思想 19
1.8 小結(jié) 20
第2章 端點(diǎn)的設(shè)計(jì)與請(qǐng)求的形式 21
2.1 設(shè)計(jì)通過(guò)API公開(kāi)的功能 21
2.2 API端點(diǎn)的設(shè)計(jì)思想 24
2.3 HTTP方法和端點(diǎn) 31
2.3.1 GET方法 32
2.3.2 POST方法 33
2.3.3 PUT方法 33
2.3.4 DELETE方法 34
2.3.5 PATCH方法 35
2.4 API端點(diǎn)的設(shè)計(jì) 37
2.4.1 訪問(wèn)資源的端點(diǎn)設(shè)計(jì)的注意事項(xiàng) 41
2.4.2 注意所用的單詞 43
2.4.3 不使用空格及需要編碼的字符 43
2.4.4 使用連接符來(lái)連接多個(gè)單詞 44
2.5 搜索與查詢(xún)參數(shù)的設(shè)計(jì) 45
2.5.1 獲取數(shù)據(jù)量和獲取位置的查詢(xún)參數(shù) 46
2.5.2 使用相對(duì)位置存在的問(wèn)題 47
2.5.3 使用絕對(duì)位置來(lái)獲取數(shù)據(jù) 48
2.5.4 用于過(guò)濾的參數(shù) 49
2.5.5 查詢(xún)參數(shù)和路徑的使用區(qū)別 52
2.6 登錄與OAuth 2.0 53
2.6.1 access token的有效期和更新 58
2.6.2 其他Grant Type 59
2.7 主機(jī)名和端點(diǎn)的共有部分 61
2.8 SSKDs與API的設(shè)計(jì) 63
2.9 HATEOAS和REST LEVEL3 API 64
2.9.1 REST LEVEL3 API的優(yōu)點(diǎn) 67
2.9.2 REST LEVEL3 API 67
2.10 小結(jié) 68
第3章 響應(yīng)數(shù)據(jù)的設(shè)計(jì) 69
3.1 數(shù)據(jù)格式 69
3.2 使用JSONP 74
3.2.1 支持JSONP的操作方法 75
3.2.2 JSONP與錯(cuò)誤處理 77
3.3 數(shù)據(jù)內(nèi)部結(jié)構(gòu)的思考方法 79
3.3.1 讓用戶(hù)來(lái)選擇響應(yīng)的內(nèi)容 81
3.3.2 封裝是否必要 82
3.3.3 數(shù)據(jù)是否應(yīng)該扁平化 83
3.3.4 序列與格式 85
3.3.5 該如何返回序列的個(gè)數(shù)以及是否還有后續(xù)數(shù)據(jù) 88
3.4 各個(gè)數(shù)據(jù)的格式 90
3.4.1 各個(gè)數(shù)據(jù)的名稱(chēng) 90
3.4.2 如何描述性別數(shù)據(jù) 92
3.4.3 日期的格式 95
3.4.4 大整數(shù)與JSON 96
3.5 響應(yīng)數(shù)據(jù)的設(shè)計(jì) 97
3.6 出錯(cuò)信息的表示 98
3.6.1 通過(guò)狀態(tài)碼來(lái)表示出錯(cuò)信息 98
3.6.2 向客戶(hù)端返回詳細(xì)的出錯(cuò)信息 99
3.6.3 如何填寫(xiě)詳細(xì)的出錯(cuò)信息 101
3.6.4 發(fā)生錯(cuò)誤時(shí)防止返回HTML 102
3.6.5 維護(hù)與狀態(tài)碼 102
3.6.6 需要返回意義不明確的信息時(shí) 103
3.7 小結(jié) 104
第4章 最大程度地利用HTTP協(xié)議規(guī)范 105
4.1 使用HTTP協(xié)議規(guī)范的意義 105
4.2 正確使用狀態(tài)碼 107
4.2.1 2字頭狀態(tài)碼:成功 109
4.2.2 3字頭狀態(tài)碼:添加必要的處理 111
4.2.3 當(dāng)客戶(hù)端請(qǐng)求發(fā)生問(wèn)題時(shí) 113
4.2.4 5字頭狀態(tài)碼:當(dāng)服務(wù)器端發(fā)生問(wèn)題時(shí) 115
4.3 緩存與HTTP協(xié)議規(guī)范 116
4.3.1 過(guò)期模型 117
4.3.2 驗(yàn)證模型 120
4.3.3 啟發(fā)式過(guò)期 122
4.3.4 不希望實(shí)施緩存的情況 123
4.3.5 使用Vary來(lái)指定緩存單位 123
4.3.6 Cache-Control首部 125
4.4 媒體類(lèi)型的指定 127
4.4.1 使用Content-Type指定媒體類(lèi)型的必要性 129
4.4.2 以x-開(kāi)頭的媒體類(lèi)型 130
4.4.3 自己定義媒體類(lèi)型的情況 131
4.4.4 使用JSON或XML來(lái)定義新的數(shù)據(jù)格式的情況 132
4.4.5 媒體類(lèi)型與安全性 133
4.4.6 請(qǐng)求數(shù)據(jù)與媒體類(lèi)型 134
4.5 同源策略和跨域資源共享 136
4.5.1 CORS基本的交互 137
4.5.2 事先請(qǐng)求 138
4.5.3 CORS與用戶(hù)認(rèn)證信息 139
4.6 定義私有的HTTP首部 139
4.7 小結(jié) 141
第5章 開(kāi)發(fā)方便更改設(shè)計(jì)的Web API 143
5.1 方便更改設(shè)計(jì)的重要性 143
5.1.1 公開(kāi)發(fā)布的API 144
5.1.2 面向移動(dòng)應(yīng)用的API 145
5.1.3 Web服務(wù)中使用的API 145
5.2 通過(guò)版本信息來(lái)管理API 146
5.2.1 在URI中嵌入版本編號(hào) 147
5.2.2 如何添加版本編號(hào) 149
5.2.3 在查詢(xún)字符串里加入版本信息 151
5.2.4 通過(guò)媒體類(lèi)型來(lái)指定版本信息 152
5.2.5 應(yīng)該采用什么方法 153
5.3 版本變更的方針 153
5.4 終止提供API 155
5.4.1 案例學(xué)習(xí):Twitter廢除舊版本的API 156
5.4.2 預(yù)先準(zhǔn)備好停止服務(wù)時(shí)的規(guī)范 156
5.4.3 在使用條款中寫(xiě)明支持期限 159
5.5 編排層 160
5.6 小結(jié) 162
第6章 開(kāi)發(fā)牢固的Web API 163
6.1 讓W(xué)eb API變得安全 163
6.2 非法獲取服務(wù)器端和客戶(hù)端之間的信息 165
6.2.1 用HTTPS對(duì)HTTP通信實(shí)施加密 165
6.2.2 使用HTTPS是否意味著100%安全 167
6.3 使用瀏覽器訪問(wèn)API時(shí)的問(wèn)題 169
6.3.1 XSS 169
6.3.2 XSRF 174
6.3.3 JSON劫持 176
6.4 思考防范惡意訪問(wèn)的對(duì)策 180
6.4.1 篡改參數(shù) 181
6.4.2 請(qǐng)求再次發(fā)送 183
6.5 同安全相關(guān)的HTTP首部 185
6.5.1 X-Content-Type-Options 185
6.5.2 X-XSS-Protection 186
6.5.3 X-Frame-Options 186
6.5.4 Content-Security-Policy 187
6.5.5 Strict-Transport-Security 187
6.5.6 Public-Key-Pins 188
6.5.7 Set-Cookie首部和安全性 189
6.6 應(yīng)對(duì)大規(guī)模訪問(wèn)的對(duì)策 191
6.6.1 限制每個(gè)用戶(hù)的訪問(wèn) 192
6.6.2 限速的單位 194
6.6.3 應(yīng)對(duì)超出上限值的情況 195
6.6.4 向用戶(hù)告知訪問(wèn)限速的信息 198
6.7 小結(jié) 204
附錄A 公開(kāi)Web API的準(zhǔn)備工作 205
A.1 提供API文檔 205
A.2 提供沙盒API 206
A.3 API Console 207
A.4 提供SDK 209
附錄B Web API確認(rèn)清單 211