2017-10-19 5 views
0

問題の正しいルートを選択することについてのジレンマがあります。 私は自分のデータベースに食糧項目を持ち、この食物の写真も持っています。RESTful API - 使用するルートフォームを決定できません

POST /food/{id}/photos 

今すぐ問題が削除されています。私はこれを使用する一部の食品にいくつかの写真を追加したい場合は

GET /food/{id}/photos 

:私はいくつかの食品のすべての写真を一覧表示したいときに、私はこのルートを使用します食べ物の写真。すべてのユーザーが同じ食品のより多くの写真を投稿することができますので、私は単純に使用することはできませんこの1:私が好きな最初の一貫性について

DELETE /food/{food_id}/photos/{photo_id} 
DELETE /photos/{id} 

:私はこの問題を解決するための2つの方法を参照してください

DELETE /food/{id}/photos 

他の写真ルートもあります。しかし、私はすべての写真が一意のIDを持っているので、食品idの形で冗長性が嫌いです。したがって、この場合、食物IDは無関係です。

第2の解決策はよりクリーンですが、他のルートとの一貫性はありません。私は、写真を作成することは/ food/prefixを経由していることを意味し、削除はこのプレフィックスなしです。

どのルートを使用することをお勧めしますか?

+0

特定の食料品のすべての写真を削除する可能性がある場合は、最初のものがその柔軟性を提供します – Alan

+0

あなたのURIのデザインは、RESTfulアーキテクチャーを遵守しているクライアントとは関係ありませんあなたは主に意見に基づいているので、私はここにも同様の質問がたくさんあるので、それに近い理由で投票しました。 –

答えて

0

私はDELETE /写真/ {ID}に比べて、より良い解決策として残りURL DELETE /食品/ {food_id} /写真/ {} photo_idスーツを考えます。

ので、私のように、読み取りURL /食品/ {food_id} /写真/ {photo_id}が、私はあなたが読んしようとするかのように、あなたの要求をされ、「特定の食品のための写真を削除」のようにそれを読んでDELETE/photos/{id}、写真IDで写真を削除しますが、写真を削除する料理は教えてくれません。さらに読書のために

  1. https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9
  2. http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api

注: DELETEリソースの例を参照してください。

+0

これはよく説明されています。ありがとうございました。 –

0

'/food/{food_id}/photos/{photo_id}'を使用すると、photo_idはグローバルに一意である必要はありません。 '/food/{food_id}'の文脈でユニークであれば十分です。つまり、UUIDや衝突の可能性の低い大きな構造を使用する必要はありません。これは、単純に増加する数であっても、短い読み込み可能なテキストであってもよい。

/food/{food_id}/photos/{photo_id}を使用すると、異なるサーバー上のリソースを処理する機会があり、階層型URIがルーティングを実装するチャンスを与えられるため、スケールが向上します。

/photos/{id}を使用している場合、すべての写真はある種のグローバルストアに保存する必要があります(IDに内部構造がない場合)。

+0

私は第2段落にいくつか問題があります。スケーリングは通常、複数のサーバーが同じデータを提供することによって、多くのサーバー間でデータを分割するのではなく、1つのサーバーが特定の要求を処理すると処理できなくなり、スケーラビリティが低下する場合があります。写真に固有のIDがある場合、実際には '/ photos/{id}'や '/ food/{food_id}/photos/{photos_id}'に大きな違いはありません。本当のRESTfulなクライアントは、URIが最初にどのように設定されているか気にしません! –

+0

実際のRESTfulクライアントでは、実際にはURLを気にしません。データを重複して格納し、データを同時に分割することは可能ですが、私のスケーリングの例はおそらく最高ではありませんでした。大量のデータを一般的に管理するスケーリングについて考えました。たとえば、要求ログの分析やメトリックの作成は、基になるモデルを表すURI構造で簡単です。 (今度はその写真は食品に属しています) – pcjuzer

関連する問題