2012-02-28 39 views
2

我正在開發一些使用PHP和Apache的基本寧靜的Web服務,我想知道我是否應該構建提供父實體名稱的URL。讓我來解釋這更好:我應該在URL中提供父資源名還是不提供RESTful WS?

我有2個實體,讓我們假設國家城市。我現在只是提供WS來獲取,創建,更新或刪除城市,但API將不支持國家通過WS操縱。我使用mod_rewrite的重新映射URL和我的API來處理城市提供以下網址:

. GET  /api/countries/<country_id>/cities   cities of country with id <country_id> 

. GET  /api/countries/<country_id>/cities/<city_id> city with id <city_id> 

. POST /api/countries/<country_id>/cities   add a city to country with id <country_id> 

. PUT  /api/countries/<country_id>/cities/<city_id> update the city whose country has id <country_id> 

. DELETE /api/countries/<country_id>/cities/<city_id> delete city ... 

我開始尋找小心通過以下網址與我弄糊塗了一個人是否應該提供父實體名稱和ID或不。我做出了一個很好的假設,即城市不能分配到多個國家,即不是多對多的關係。假設我認爲可以爲許多API函數提供較短的URL模式。例如,如果客戶想刪除一些城市就足夠了,如果他送:

. DELETE /api/cities/14 

我知道,一個城市屬於一個國家,而客戶端不需要作出之前找出國家ID請求。

除了第一個網址(獲得所有國家的城市)之外,大部分網址都可以轉換爲這種較短的網址。

這是我第一次開發Web服務,我沒有太多的瞭解它,所以我可能會誤解一些東西。我可以請一些建議嗎?非常感謝併爲我的基礎英語感到遺憾。編輯1:我認爲這個問題可以概括爲'我應該如何處理API網址中的實體關係?'

回答

3

'我應該如何處理API網址中的實體關係?'別。請使用您回覆的資源中的鏈接。

舉例來說,如果我做一個GET對/cities/612我可能會回去

{ 'city': 
    { 
    'id': 612, 
    'self': '/cities/612', 
    'name': 'Sydney', 
    'country': { 'name': 'Australia', 'href': '/country/61' }, 
    'region': { 'name': 'Asia Pacific', 'href': '/region/12' }, 
    'delete': { 
     'method': 'delete', 
     'href': '/cities/612' 
    }, 
    'update': { 
     'method': 'put', 
     'href': '/cities/612', 
     ... 
    }, 
    ... 
    } 
} 

這可以讓你有你喜歡的任何實體的關係,而不必擔心你的網址。您可以輕鬆添加新的關係而不會破壞現有的客戶端。舉例來說,如果你想加入「地球」的一個新的關係,就上/cities/612現在可以提供

{ 'city': 
    { 
    'id': 612, 
    'self': '/cities/612', 
    'name': 'Sydney', 
    'country': { 'name': 'Australia', 'href': '/country/61' }, 
    'region': { 'name': 'Asia Pacific', 'href': '/region/12' }, 
    'planet': { 'name': 'Earth', 'href': '/planet/1' }, 
    'delete': { 
     'method': 'delete', 
     'href': '/cities/612' 
    }, 
    'update': { 
     'method': 'put', 
     'href': '/cities/612', 
     ... 
    }, 
    ... 
    } 
} 

看一看A RESTful Hypermedia API in Three Easy Steps瞭解更多詳情。

相關問題