隨著RESTful Web services的流行程度不斷地上升,開發(fā)人員需要知道如何避免開發(fā)中的陷阱以及讓開發(fā)出來的Web service達(dá)到自己能做到的最好程度。
過去的幾年里,我們看到RESTful Web services變得流行起來是有好些原因的。這里有十個(gè)技巧你應(yīng)該要做的,它們能讓你的RESTful Web Service更加高水準(zhǔn)并且被其他開發(fā)人員使用起來更加簡(jiǎn)易。
1、不要尋找一個(gè)官方的“REST 標(biāo)準(zhǔn)”
REST是一個(gè)概念,不是一個(gè)標(biāo)準(zhǔn)。因此沒有任何的要求讓你的 RESTful Web service在一個(gè)特定的方式下運(yùn)行。話雖如此,但......
2、還是堅(jiān)持一些標(biāo)準(zhǔn)
......你的 RESTful Web services 應(yīng)該遵循至少一些標(biāo)準(zhǔn)!例如用戶認(rèn)證的OAuth協(xié)議、數(shù)據(jù)交換的JSON和XML、網(wǎng)絡(luò)傳輸和自控制的HTTP協(xié)議還有URI標(biāo)準(zhǔn)。如果你想要一個(gè)更加完整的包,開放數(shù)據(jù)協(xié)議OData是一個(gè)有效的選擇(因?yàn)樗鼔虼螅浚R驗(yàn)闆]有人說“REST必須堅(jiān)持這些標(biāo)準(zhǔn)”這樣的話,并不意味著你就應(yīng)該按照自己的意愿來。
3、確保你的文檔是完美無瑕疵的
使用 SOAP 協(xié)議的WSDL(Web Service 定義語言)系統(tǒng),如果你有一個(gè)基于WSDL、可以自動(dòng)生成代碼的工具,那么開發(fā)Web Service是相當(dāng)簡(jiǎn)單的。但如果用 REST ,由于services不需要嚴(yán)格的定義,并且它們運(yùn)行在被稱為適當(dāng)?shù)卣_工作的理念上。這意味著service的文檔必須要非常嚴(yán)謹(jǐn)。如果你要開發(fā)一個(gè)Web Service一定要確保你的文檔百分百的正確。
4、提供 JSON 輸出
JSON 已經(jīng)迅速的變成web上的重要標(biāo)準(zhǔn)。首先,它很方便,因?yàn)樗梢院苋菀椎刈孞avaScript以最少的編碼量來使用Web Service。現(xiàn)在有很多庫(kù)可以讓服務(wù)端與客戶端的JSON交互工作的非常好。
5、不要漏掉 XML
說到輸出,XML 依然像往常一樣非常重要。為什么要同時(shí)支持 XML 和 JSON 呢?因?yàn)椴⒉皇撬械南到y(tǒng)都能使用 JSON 的,但如果一個(gè)系統(tǒng)能被稱為 Web Service ,那么它就一定會(huì)被規(guī)定去處理XML。現(xiàn)在有成堆的遺留系統(tǒng),舉個(gè)例子,它是用XML工作而不是JSON。并且不是所有開發(fā)人員都想去mixing和匹配JSON跟XML的。因此要確保你的Web service系統(tǒng)支持這兩種格式。通過HTTP請(qǐng)求頭的“Accepts”參數(shù)來做這種支持而不是通過不同的包含參數(shù)的 service URL 來做。
6、理解 HTTP 動(dòng)詞
REST Web services 其中一個(gè)很核心關(guān)鍵的是HTTP協(xié)議已經(jīng)定義好的一大塊功能。而這其中最基本的一部分就是 HTTP 動(dòng)詞,例如 GET、POST 。而這些基本功能在REST中已經(jīng)被很好地、充分地理解,一些想法仍然不斷地涌現(xiàn),例如使用打補(bǔ)丁的方式更新實(shí)體中一些特定屬性而不是整個(gè)實(shí)體。
7、理解 URI 路由的重要性
RESTful Web services 在很大程度上是通過URI來決定干什么的。舉個(gè)例子,在一次 GET 請(qǐng)求中,典型的URI路徑會(huì)包含一個(gè)實(shí)體的主鍵值(或者其他標(biāo)識(shí)鍵值)來檢索獲取實(shí)體的數(shù)據(jù)。例如 “http://www.example.com/service/entityname/76″ 將檢索名字為 entityname, 主鍵值為 76 的實(shí)體。使用 REST Web services,URI 不僅是一種訪問service的方式,還是控制service和作為傳達(dá)你的需求的信號(hào)載體。
8、在版本管理下進(jìn)行更新維護(hù)
一件很誘人的事是你只需對(duì)唯一一個(gè)版本的service做更新維護(hù)。但真的不要這樣做!確保你每一次發(fā)布更新后都新開一個(gè)分支版本來維護(hù)。最簡(jiǎn)單、最常見的辦法是讓你的service URI 帶上版本號(hào),通常是路徑的一部分。人們最需要的一件事就是使用更新后的軟件沒有任何新的問題或警告出現(xiàn)。
9、與你的用戶保持聯(lián)系
因?yàn)橛脩舨粫?huì)主動(dòng)發(fā)現(xiàn)你的更新,因此你和你的用戶保持聯(lián)系就顯得十分重要了。例如,當(dāng)你為你的service發(fā)布一個(gè)新的版本時(shí),你應(yīng)該給每一個(gè)用戶發(fā)一封郵件讓他們知道,以及提供舊版本的缺陷信息。
10、提供示例代碼
對(duì)你的用戶來說你要做的最好的一件事之一就是給他們提供示例代碼。確保你給出的代碼至少包含以下幾個(gè)主要的開發(fā)語言:Java、.NET、JavaScript、Ruby還有Python。如果有必要的話,雇傭一個(gè)顧問將這些代碼放在一起。因?yàn)樗鼘?duì)于你的 service 能否被采用是絕對(duì)重要的。還要確保你的許可協(xié)議可以讓你的用戶沒有任何風(fēng)險(xiǎn)影響地使用你的示例代碼,例如可以使用 MIT 或 BSD 許可協(xié)議。