web-dev-qa-db-ja.com

REST呼び出しのGETで配列を渡す

次のようなユーザーの予定を取得するためのURLがあります。

/user/:userId/appointments

複数のユーザーの予定を取得する場合、URLはどのように表示されますか?

あるべきです:

/appointments?users=1d1,1d2..

ありがとう、クリス。

46
ChrisOdney

コレクションはリソースなので、/ appointmentsはリソースとして問題ありません。

コレクションは通常、クエリ文字列を介してフィルターを提供します。これは、本質的にusers = id1、id2 ...です。

そう、

/appointments?users=id1,id2 

フィルタ処理されたRESTfulリソースとしては問題ありません。

60
bryanmac

REST呼び出しパラメータを、通常はJSONエンコードすることでシリアル化することをお勧めします。

/appointments?users=[id1,id2]

あるいは:

/appointments?params={users:[id1,id2]}

次に、サーバーでエンコードを解除します。これにより、長期的には柔軟性が向上します。

パラメータを送信する前に、URLEncodeも必ず確認してください!

8
sgress454

選択するサーバーアーキテクチャ/フレームワークに応じて意味をなす別の方法は、同じ引数を何度も繰り返すことです。このようなもの:

/appointments?users=id1&users=id2

この場合、パラメーター名を単数形で使用することをお勧めします。

/appointments?user=id1&user=id2

これは、Jersey(for Java)などのフレームワークによってネイティブにサポートされています。詳細については この質問 をご覧ください。

7

これは私のために働いた。

/users?ids[]=id1&ids[]=id2
1
Ravi MCA
/appointments?users=1d1,1d2.. 

結構です。 GETでボディを渡すことはできないため、これはほとんど唯一の賢明なオプションです。

1
Oleksi