最近一直在使用Restful API,最近正好看到一篇自定義restful接口規范的“拋磚引玉”得的文章,索性翻譯一下,與大家分享。 原文地址:http://java.dzone.com/articles/restful-standard-resolved
最近,我正在使用RESTfull的方式構建一個web服務。盡管現在有很多的一般的指導和提示告訴你如何定義restful接口,但是卻沒有一個明確的標准或大家都接受的schema定義去遵循。
在網上獲取了一些信息后,我打算打破這一局面:)我打算分享一下我定義的規則和結構,並且很希望能得到一些反饋來幫助我完善這個規則,所以,不要猶豫,請毫無留情給我指出錯誤和毛病吧。</div>
高級別的模式是:
http(s)://server.com/app-name/{version}/{domain}/{rest-convention}
這里,{version}代表api的版本信息。{domain}是一個你可以用來定義任何技術的區域(例如:安全-允許指定的用戶可以訪問這個區域。)或者業務上的原因。(例如:同樣的功能在同一個前綴之下。)
{rest-convention} 代表這個域(domain)下,約定的rest接口集合。
單資源( singular-resourceX )
url樣例:order/ (order即指那個單獨的資源X)
- GET - 返回一個新的order
- POST- 創建一個新的order,從post請求攜帶的內容獲取值。
單資源帶id(singular-resourceX/{id} )
URL樣例:order/1 ( order即指那個單獨的資源X )
- GET - 返回id是1的order
- DELETE - 刪除id是1的order
- PUT - 更新id是1的order,order的值從請求的內容體中獲取。
復數資源(plural-resourceX/)
URL樣例:orders/
- GET - 返回所有orders
復數資源查找(plural-resourceX/search)
URL樣例:orders/search?name=123
- GET - 返回所有滿足查詢條件的order資源。(實例查詢,無關聯) - order名字等於123的。
復數資源查找(plural-resourceX/searchByXXX)
URL樣例:orders/searchByItems?name=ipad
- GET - 將返回所有滿足自定義查詢的orders - 獲取所有與items名字是ipad相關聯的orders。
單數資源(singular-resourceX/{id}/pluralY)
URL樣例:order/1/items/ (這里order即為資源X,items是復數資源Y)
- GET - 將返回所有與order id 是1關聯的items。
singular-resourceX/{id}/singular-resourceY/
URL樣例:order/1/item/
- GET - 返回一個瞬時的新的與order id是1關聯的item實例。
- POST - 創建一個與order id 是1關聯的item實例。Item的值從post請求體中獲取。
singular-resourceX/{id}/singular-resourceY/{id}/singular-resourceZ/
URL樣例:order/1/item/2/package/
- GET - 返回一個瞬時的新的與item2和order1關聯的package實例。
- POST - 創建一個新的與item 2和order1關聯的package實例,package的值從post請求體中獲得。
上面的規則可以在繼續遞歸下去,並且復數資源后面永遠不會再跟隨負數資源。
總結幾個關鍵點,來更清晰的表述規則。
- 在使用復數資源的時候,返回的是最后一個復數資源使用的實例。
- 在使用單個資源的時候,返回的是最后一個但是資源使用的實例。
- 查詢的時候,返回的是最后一個復數實體使用的實例(們)。
希望你的關注能幫助我完整這個結構並解決你可能偶然遇到的問題。
在下一篇文章里,在這個結構完善之后,我將會一些技術上的樣例如何在Spring MVC3.1中,使用它。