2016-06-17 4 views
0

私のAPIにとっては安らかなデザインが混乱しています。デザインに関する助言が必要ですユーザーロールで安心して

私は2つの役割がエンドユーザーとバックエンド(管理者)です。バックエンドの役割で、私はユーザーの任意のリソースにアクセスできます

ユーザーは多くの注文を持つことができます。

は、だから私は、ユーザーリソース

GET /users/{userID} -- get User Information 
GET /users/{userID}/orders -- list user order list 
POST /users/{userID}/orders -- user make an order 

にベースを定義した。しかしオム..後にいくつかのオンラインドキュメントを読んで、ユーザーIDが認証フェーズの後に識別されますので、ので、ここでを使用して、さまざまなデザインをしていますリソース:

GET /orders/ --list user order list by user account(backend can get all) 
GET /orders/{orderID} --get orderID by userID 
POST /orders/ -- user make an order. 

この定義では、バックエンドユーザーがユーザーによる注文をリストする場合。どちらの方法を使うべきですか?

GET /orders?user={userID} (user as query parameter) -- List order with userID 

それとも

GET /users/{userID}/orders 

PLSのは、1(ユーザーまたは注文リソース)私に助言デザインが優れている、となぜですか? Tks、

答えて

1

どのデザインがユースケースによって異なるかによって異なります。

例えば、の2人のユーザーを想定してみましょう:

  1. アリス(userID=1
  2. ボブ(userID=2

をバックエンドはどこかで利用可能userID=1を持っそれでは、またアリスが既に認証されているとしましょう。アリスは彼女自身の注文を一覧表示したい場合

  1. は、最短の方法は、

    GET /orders 
    

    なるとバックエンドユーザー利用可能userIDを持っているでしょう。

  2. リクエストは、認証されたユーザーの注文を取得するとします。アリスが試してみるとどうなりますか/users/2/orders - ボブの注文を見ることが許されていますか?アリスが多くのミスタイプをして/users/2/の質問を出すとどうなるでしょうか?

  3. 最終的な検討事項 - 今後検索する属性が増えたらどうなるでしょうか?将来の注文からuserIDが削除されたらどうなりますか(ユーザー - カート - >注文のような新しい関係があるとします)どのURIスキームを更新するのが簡単ですか?

したがって、単純な答えはなく、使用状況によって異なります。オーダーを取得するだけの場合は、最も柔軟性とシンプルさを考慮して、{GET|POST} /ordersをお勧めします。

+0

for 2 2. Aliceにバックエンドの役割があり、すべての注文を表示する権限を持っていればOKですが、Aliceが通常のユーザーであれば、サービスから403が得られます。私は、あなたの3番目の注釈がURIパターンを選択する正当な理由だと思います。 Tks – ducanhng

関連する問題