2017-07-13 9 views
0

私は2つのエンティティHotel,を持っています。各商人は多くのホテルを持つことができます。ネストされたリソースのRESTful API

/api/v1/merchants/{id}/hotels/{id}

をしかし、私はこの意味論と間違っているものを考えていた:今私はこのようなAPIエンドポイントを過ごしてい

/api/v1/hotels/{id}

後の1が短すぎます。

答えて

1

私の経験では、後者のほうが後で柔軟性が増すので、後者の方が望ましいです。 6ヶ月のうちに誰かが "こんにちは、私はAgrabaのすべてのホテルを調べることができるようになりたい"と言うつもりです。最初のURLスキームはそれを苦痛にさせます - 新しいエンドポイントを追加する必要があります。 2番目のURLスキームでは、クエリパラメータ:GET /hotels?location=Agrabaでサポートされています。

/merchants/{id}/hotelsをコレクションエンドポイントとして使用して、POST/DELETEを使用して特定の販売者からホテルを追加/削除することができます。

+0

私は理想的には、エンティティの各インスタンスごとに固有のものを生成する必要があるため、私は同意します。私はちょうどRESTセマンティクスについて混乱していました。 – CodeYogi

+0

RESTはURLの設計上何も言いません。 RESTでは、URLは不透明です。意味値は含まれません。 URLのセマンティックコンテンツは、開発者のためのAPI設計上の便宜です。 –

+0

これは前の答えが間違っていたことを意味しますか? – CodeYogi

0

RESTでは、各URLは、単一のリソースを一意に識別する必要があります。

ホテルのidがグローバルにユニークである場合は、短いリンクの使用に問題はありません。ただし、ホテルID 1がマーチャント1とマーチャント2と異なる場合は、最初にURL(基本的にユニークな複合キー)を使用してください。

+0

私は 'hotel'のために1つのテーブルを持っていますので、そのIDは一意である可能性があります。 – CodeYogi

関連する問題