2012-02-28 42 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了解更多详情。

相关问题