今天收到InfoQ的推薦郵件,看了標(biāo)題就很感興趣,花了一些時(shí)間一看,果然是很不錯(cuò)的一個(gè)案例分析,同時(shí)也讓自己學(xué)到了不少。大致羅列一下看后的一些文章重點(diǎn)內(nèi)容。案例地址:http://www.infoq.com/cn/articles/webber-rest-workflow
1.通過(guò)REST服務(wù)請(qǐng)求完成狀態(tài)遷移,同時(shí)合理利用OPTIONS來(lái)查看資源操作權(quán)限。
2.合理利用Http Heads來(lái)返回資源URI,以及通過(guò)ErrorCode來(lái)確定操作結(jié)果,并且作后處理。
3.通過(guò)返回內(nèi)容指定后續(xù)流程資源定位以及操作來(lái)實(shí)現(xiàn)流程化。
4.通過(guò)Put報(bào)頭的兩種版本比較標(biāo)示來(lái)防止并發(fā)修改。(其實(shí)也可以優(yōu)化來(lái)做查詢緩存的工作)
5.使用Atom協(xié)議來(lái)發(fā)布和管理資源(Atom是最適合REST風(fēng)格服務(wù)的數(shù)據(jù)源格式定義)
6.URI模版的使用建議,慎用,如果確實(shí)能夠有把握抽象資源定位。
7.Auth可以通過(guò)輕量級(jí)Http Head中的Authentication或者WS-*的方式來(lái)實(shí)現(xiàn)。(也可以通過(guò)https實(shí)現(xiàn))
總的來(lái)說(shuō),其實(shí)整個(gè)案例分析下來(lái)以后,可以發(fā)現(xiàn)如果要使得服務(wù)流程化,那么前提就是數(shù)據(jù)交互格式統(tǒng)一(XML,Atom),然后利用Http協(xié)議作為服務(wù)協(xié)議而非承載協(xié)議,利用已有的操作約定,報(bào)文頭部標(biāo)示和返回的錯(cuò)誤碼來(lái)完成資源狀態(tài)遷移的工作,同時(shí)通過(guò)在返回內(nèi)容中嵌入流程化內(nèi)容,使得整個(gè)流程可以貫穿。(這里還是簡(jiǎn)單的流程串聯(lián),其實(shí)如果在流程規(guī)則協(xié)議中增加復(fù)雜的邏輯定義,則可以實(shí)現(xiàn)更為強(qiáng)大的Web workflow)。
但對(duì)于Open API或者類(lèi)似的REST流程化業(yè)務(wù)來(lái)說(shuō),安全其實(shí)還是最大的挑戰(zhàn),特別是在對(duì)資源的訪問(wèn)控制權(quán)限上。當(dāng)然可以類(lèi)似于WS-Security提出一套較為安全成熟的方案,但是性能和使用簡(jiǎn)易性則會(huì)大打折扣,也失去了REST本身的優(yōu)勢(shì)。