2016-10-11 9 views
0

私はREST APIを初めて使用しています。私は現在、自分のプロジェクトにエンドポイントを作成しています。私の質問は?IDの複数の選択でREST APIエンドポイントを作成する方法

複数のレコードのエンドポイントを作成する正しい方法は何ですか。代わりに、この

/users/:id 

をやって、私は、SQL

"where users.id in [ ]" 

のように複数のユーザーを選択します。このようなエンドポイントを作成することが正しいです:

1のIDを持つユーザーを選択
/users?user_id=1,2,3 

、2および3?

答えて

1

コードにリストを追加して、パルマクエリからユーザーIDのリストを取得することができます。

エンドポイントは /ユーザのように見えるだろう?ID = 1つの& ID = 2 ... Javaでは

を、あなたは以下のようにクエリのparamsをキャッチすることができます。

@QueryParam( "ID")一覧<整数> IDS

+0

フォローアップの質問:このURLをエンドポイントとして持つのは間違っていますか?/users?user_id = 1,2,3 –

+1

エンドポイントの定義に間違いはありません。しかし、私が見ているのは、ユーザーIDのリストを検証する必要があるということです。あなたの要件のために、あなたは直接クエリParamからSQL where節に値を渡すことができます。しかし、あなたの入力に対して他の処理をしているのであれば、Listデータ構造に入力したいのが理想です。あなたが言及したエンドポイントを持っている場合は、文字列をspilitしてリストを作成する必要があります。これの代わりに、明確に定義されたAPIを使用してリストに直接入れることができます。 –

1

あなたはRolsonのQuadraは(/search?q=volvo&q=opel)に述べたように、以下の例のように、ブラウザがGET要求を実行し、複数選択を可能にするHTMLフォームを使用している場合。

<form action="/search" method="GET"> 
    <select multiple name="q"> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="opel">Opel</option> 
    <option value="audi">Audi</option> 
    </select> 
    <button type="submit">Search</button> 
</form> 

ここでは、送信される内容を理解することはサーバーの実装によるものです。例えば、Railsは/search?q[]=volvo&q[]=opelを理解しています(配列を示すために使用される角括弧に注意してください)。

1

クエリパラメータの他に、matrix parametersも使用できます。マトリックスパラメータには、URLの特定の部分に明確に属しているという利点があります。次のことを考えてみましょう:

/users;id=1,2,3/messages 

これは、それは次のようになりクエリパラメータで

を、ユーザー1に属するメッセージのリストを返す2と3になります。

/users/messages?users=1,2,3 

このしかし、それはむしろ奇妙です。クエリパラメータは、URLのどの部分に属しているかを伝えません。

欠点は、マトリックスパラメータのフレームワークサポートが様々であることです。サポートするものもあれば、サポートしないものもあります。

私は行列のパラメータをここで最高にしたいと思いますが、クエリパラメータもOKです。

リストのようなパラメーターの場合は、パラメーターを指定する方法が2つあります。パラメーター名を繰り返したり、異なる値をカンマで区切ったりすることができます。どちらも可能であり、一部のフレームワークではフレームワークが優先され、一部のフレームワークでは他のフレームワークが優先されます。これは、行列パラメータとクエリパラメータの両方に当てはまります。

関連する問題