【正文】
response body ... 但對(duì)于復(fù)雜的API你應(yīng)該使用json。 rel=next, 。subject : I have a question!,name : Bob這里沒有什么標(biāo)準(zhǔn),但是一個(gè)普遍的方式是接受XHTTPMethodOverride請(qǐng)求頭。 XRateLimitLimit :當(dāng)前時(shí)間段允許的并發(fā)請(qǐng)求數(shù)鑒權(quán)注意使用url參數(shù)的問題是:目前大部分的網(wǎng)絡(luò)服務(wù)器都會(huì)講query參數(shù)保存到服務(wù)器日志中,這可能會(huì)成為大的安全風(fēng)險(xiǎn)。返回頭里的LastModified:包含了API應(yīng)該至少將所有的400系列的錯(cuò)誤以json形式返回。]}304 not modified 請(qǐng)求格式錯(cuò)誤。成功創(chuàng)建。}API的錯(cuò)誤碼可以分為兩部分,400系列和500系列,400系列表明客戶端錯(cuò)誤:如錯(cuò)誤的請(qǐng)求格式等。如果輸入的HTTP請(qǐng)求包含IFNONEMATCH頭以及一個(gè)ETag值,那么API應(yīng)該返回304 not modified狀態(tài)碼,而不是常規(guī)的輸出結(jié)果。支持jsonp的API需要額外的鑒權(quán)方法,因?yàn)閖sonp請(qǐng)求無法發(fā)送普通的credential。RFC 1123加入速度設(shè)置之后,應(yīng)該提示用戶,至于如何提示標(biāo)準(zhǔn)上沒有說明,不過流行的方法是使用HTTP的返回頭。重寫HTTP方法有的客戶端只能發(fā)出簡(jiǎn)單的GET 和POST請(qǐng)求。id : 12,這點(diǎn)在基于游標(biāo)的分頁中尤為重要。這使得程序不得不根據(jù)字符串解析出布爾和整數(shù),而且還沒有層次結(jié)構(gòu)–雖然有一些關(guān)于層次結(jié)構(gòu)信息的約定存在可是和本身就支持層次結(jié)構(gòu)的json比較一下還是不很好用。如果給出了這個(gè)參數(shù),那么API應(yīng)該返回200,并且把真正的狀態(tài)碼放到返回值里面(包裝在信封里),例如:1234567callback_function({只在需要的時(shí)候使用“envelope”很多API象下面這樣返回結(jié)果:123456{想象一個(gè)用戶正在debug那么默認(rèn)的輸出就是可讀的而不用將結(jié)果拷貝到其他什么軟件中在格式化是想起來就很爽的事,不是么?下面是一個(gè)例子:$ curl $ ruby r json e 39。命名方式?是蛇形命令(下劃線和小寫)還是駝峰命名?如果使用json那么最好的應(yīng)該是遵守JAVASCRIPT的命名方法也就是說駱駝命名法。(譯注:作者這里認(rèn)為HATEOAS還不算成熟,我也不怎么理解這段就算了,讀者感興趣可以自己去原文查看)并且這個(gè)功能能有效的提高網(wǎng)絡(luò)帶寬使用率和速度。搜索:有些時(shí)候簡(jiǎn)單的排序是不夠的。值得注意的是:不要讓非SSL的url訪問重定向到SSL的url。例如:github上,對(duì)一個(gè)gists加星操作:PUT /gists/:id/star 并且取消星操作:DELETE /gists/:id/star.3. 有時(shí)候action實(shí)在沒有難以和某個(gè)資源對(duì)應(yīng)上例如search。 PUT /tickets/12/messages/5 Updates message 5 for ticket 12 DELETE /tickets/12 刪除ticekt 12可以看出使用REST的好處在于可以充分利用的強(qiáng)大實(shí)現(xiàn)對(duì)資源的CURD功能。即使你的內(nèi)部數(shù)據(jù)模型和資源已經(jīng)有了很好的對(duì)應(yīng),API設(shè)計(jì)的時(shí)候你仍然不需要把它們一對(duì)一的都暴露出來。需要強(qiáng)調(diào)的是:API的就是程序員的UI,和其他UI一樣,你必須仔細(xì)考慮它的用戶體驗(yàn)!我希望可以設(shè)計(jì)出容易使用,容易部署,并且足夠靈活的API,本文因此而生。5. API設(shè)計(jì)權(quán)衡上述幾個(gè)原則。那么我應(yīng)該如何拆分出這些資源呢?顯然從API用戶的角度來看,”資源“應(yīng)該是個(gè)名詞。 PUT /tickets/12 更新ticket 12. POST /tickets/12/messages Creates a new message in ticket 12當(dāng)你的行為不需要參數(shù)的時(shí)候,你可以把a(bǔ)ctive對(duì)應(yīng)到activated這個(gè)資源,(更新使用patch).2. 以子資源對(duì)待。使用SSL可以減少鑒權(quán)的成本:你只需要一個(gè)簡(jiǎn)單的令牌(token)就可以鑒權(quán)了,而不是每次讓用戶對(duì)每次請(qǐng)求簽名。