パーソナルプログラミングプロジェクトとして、私は大学のコースカタログを掻き集め、データをREST APIとして提供しています。私は正常にすべてのデータを掻き集めてデータベースに格納し、現在はAPIに取り組んでいます。複数のフィルタを持つREST APIを最適に設計するにはどうすればよいですか?
コースは、多くの基準に基づいてフィルタリングすることができます:インストラクター、大学、クレジット、時間、日など
は、このような状況でAPIを提供するための最良の方法は何ですか?
オプション1
私はすべての順列のURLを持っている必要があり、このような
example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>
example.com/api/bycollegeandinstructor/<collegecode>/<instructorcode>
...and so on
など、多数のURLを提供します。これは、私とAPIの両方の消費者にとって非常に面倒で、非常に不安です。
example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>
をそして消費者がbycollegeandinstructor
を望んでいるならば、彼は彼の側でフィルタリングを行います。2
オプションのみのような主要なオプションのためのAPIを提供しています。
オプション3
ユーザーが私にJSON文字列を渡し、そして私が代わりにJSON文字列の仮定
example.com/api/getcourses/<jsonstring>
jsonstring =
{
instructor:<instructorcode>,
college:<collegecode>,
...and so on
}
私はフィルタリング基準を取得するためにそれを使用、私も必要になる場合がありPOSTアレイですが、データを取得しているので消費者にとっては直感的ではないようです。
これは私が気づいていない別の方法ですか?最適なオプションの3番目のオプションであれば、可変数の値を持つ可能性があるJSOn文字列に基づいてSQLクエリを準備するための短い要約を提供できますか?あなたはURIになりつのリソース、コースのセットを、持っているようJFからの回答に拡大すること
Thanls。私はyhourの答え – xbonez
を読むまでリソースの面で考えていませんでした技術的に、それらはまだ別のリソースです。あなたは本当に順列問題をこのように避けません。実際には、college = 123&instructor = 321にinstructor = 321&college = 123と同じ応答を返すことで、これらの問題を少し増やします。この爆発のため、明示的に構成するように構成しないかぎり、多くのキャッシュは問合せパラメータを持つレスポンスをキャッシュしません。 このような理由から、一般的なパターンを特定できる場合は、オプション2をお勧めします。 – fumanchu
@fumanchuこれは、クエリパラメータを使用したリクエストに対する応答を無視したキャッシュについては興味深いことですが、私はそれを認識していませんでした。ありがとう。 – Pete