2012-02-28 3 views
2

私は、PHPとApacheを使用して、いくつかの基本的な安らかなWebサービスを開発しています。親エンティティ名を提供するURLを構築する必要があるかどうかは疑問です。RESTful WSでは、親リソース名をURLに提供する必要がありますか?

私は2つのエンティティを持っています。都市としましょう。私は現在、都市を取得、作成、更新、または削除するためのWSを提供していますが、APIは WS経由での操作をサポートしません。私はのmod_rewriteを使用してURLを再マッピングしていると私は都市を操作するためのAPIで以下のURLを提供しています:

. 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 ... 

私はこれらのURLで慎重に探し始めたと私は1つの親エンティティの名前とIDを提供する必要があるかどうか混乱しましたか否か。私は大きな前提を定めており、複数の都市に割り当てることができない、つまり多対多の関係ではないということです。これを仮定すると、より短いURLパターンが多くのAPI関数に提供されると思います。クライアントは、彼が送信する場合、それは十分だろういくつかの都市を削除したい場合例:

. DELETE /api/cities/14 

私は都市が一つの国に属していることを知っており、クライアントが行う前に、国のIDを確認する必要はありません。要求。

大部分のURLは、最初のものを除いて、この短い種類のURLに変換できます(すべてのcountrieの都市を取得します)。

これはWebサービスを初めて開発したものですが、あまり読んでいないので誤解している可能性があります。アドバイスをお願いしますか?ありがとう、私の初歩的な英語には申し訳ありません。

EDIT1:「APIのURLでエンティティの関係をどのように処理すればよいですか」という質問が一般化できると思います。

答えて

3

'APIのURLでエンティティの関係をどのように処理する必要がありますか?'しないでください。代わりにあなたが応答するリソースのリンクを使用してください。例えば

私は/cities/612にGETをすれば、私は戻って

{ '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', 
     ... 
    }, 
    ... 
    } 
} 

これはあなたのURLを心配することなく、あなたが好きな任意のエンティティの関係を持つことを可能にするかもしれません。既存のクライアントを壊すことなく、簡単に新しい関係を追加することができます。あなたは「惑星の新しい関係を追加したい場合例えば、/cities/612にGET今

{ '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を見てください。

関連する問題