2017-10-02 7 views
-1

ショッピングカートアプリケーションでは、購入可能な製品の場合は/product/、ショッピングカートの場合は/cartitem/というエンドポイントのエンドポイントがあるとします。 GET/cartitem/561つのRESTリソースを使用して別の製品を作成する

{ 
    "quantity": 4 
    "sku": "12345" 
    "name":"mars bar" 
} 

GET /product/2 response

{ 
    "sku": "12345" 
    "name":"mars bar" 
} 

例の一例cartitemを追加する場合、私は/ cartitemに/代わりに体全体を通過することのPOSTを行います、私は、製品への参照を投稿することができたいと思い

POST /cartitem 

BODY:

代わりにやってたの0

POST /cartitem/ 

{ 
    "quantity": 4 
    "sku": "12345" 
    "name":"mars bar" 
} 

注意を、私は持っていたいことはありません:cartitemを追加する方法に複数存在するため

GET 
{ 
    "quantity": "4" 
    "product":"/product/2" 
} 

理由があり、時にはあなたが持っています製品、時にはあなたが欲しい。私は、レスポンスが製品のURIを参照する必要がないようにしたいが、POSTを参照してクライアントのために簡単にすることを許可したい。

大丈夫ですか?

ありがとうございました

+1

最高の方法は、製品のIDをフルリンクではなく送信することです。明日あなたがあなたのURLを変更すると想像して、それは '製品'となり、すべてのカートは無効になるでしょう。 数量とIDを保存する – sheplu

+0

サンプルがRESTfulではないので、好きですか? RESTは、ある種の推奨事項/制約に従って、サーバーAPIからクライアントを切り離すことを目指しています。そのような堅牢性を変更する必要がない場合は、独自のアプローチを使用してください。ただし、RESTとは呼ばないでください。 –

+0

@RomanVottnerしかし、RESTのどの部分が違反されていますか?導入されたステートフルなものはありません。博士論文によると、「RESTはリソースの識別、表現によるリソースの操作、自己記述的なメッセージ、アプリケーション状態のエンジンとしてのハイパーメディアという4つのインタフェースの制約によって定義されます。そこで違反している。 –

答えて

1

リンクの代わりに製品の主キー(ID)を使用する必要があります。最終的な結果は同じであるが、そのクリーナーはもっと理にかなっている。あなたはこのためのロジックを実装するだけです。

+0

なぜそれはよりクリーンですか?いずれにしても、URLからIDを把握し、データベースを取得してProductを取得できるようになるサーバーに向かいます。 –

+0

すべての引数の前に "/ products /"を付けることは冗長であるため、よりクリーンです。プライマリキーは常に "/ products/1"または "/ products/125954"のいずれかに存在するので、冗長部分を削除してストレートかつポイントツーポイントにしないのはなぜですか?また、オブジェクトの主キーを使用して、あるものと別のものを関連付けることは、MVCプロジェクトのクラスを関連付けるか、RESTfulなAPIを作成するかなど、ほとんどの環境とタスクの標準的なプラクティスです。 – Adosi

関連する問題