[解決済み] REST API DESIGN - 異なるパラメータを持つが同じURLパターンでRESTを通してリソースを取得する。
質問
REST urlの設計に関連する質問があります。私はここにいくつかの関連する記事を見つけました。 同じリソースの異なるRESTful表現 とこちらです。 異なるフィールドでリソースをGETするためのRESTfulなURL といったものがありますが、ベストプラクティスが何なのか、なぜそうなるのか、回答がいまいち明確ではありません。以下はその例です。
私は、quot;users" リソースを表現するためのREST URLを持っています。ID または電子メールアドレスでユーザーを取得できますが、URL 表現は両方とも同じままです。多くのブログや書籍に目を通すと、人々はさまざまな方法でこれを実行していることがわかります。たとえば、次のようになります。
は、本やstackoverflowのどこかでこの方法を読みました(リンクが見つからないようです)。
GET /users/id={id}
GET /users/email={email}
多くのブログで紹介されている方法です。
GET /users/{id}
GET /users/email/{email}
クエリパラメータは通常、urlで表されるリソースの結果をフィルタリングするために使用されますが、私はこの実践が同様に使用されているのを見たことがあります。
GET /users?id={id}
GET /users?email={email}
質問ですが、これらのプラクティスのうち、apiを消費する開発者にとって最も理にかなっているのはどれでしょうか。また、その理由は何でしょうか。REST urlのデザインと命名規則に関しては、決まったルールはないと信じていますが、開発者がapisをよりよく理解するためにどのルートを取るべきかを知りたかっただけです。
すべての手助けを感謝します!
どのように解決するのですか?
私の経験では
GET /users/{id} GET /users/email/{email}
が最も一般的なアプローチです。また、ユーザーが存在しない場合にメソッドが 404 Not Found を返すことも想定して、提供された
id
または
email
. を見ても不思議ではありません。
GET /users/id/{id}
があっても不思議ではありません(私の意見では、冗長ですが)。
他のアプローチに関するコメント
-
GET /users/id={id} GET /users/email={email}
- これは見たことがないような気がしますし、もし見たとしても非常にわかりにくいでしょう。パスパラメータでクエリパラメータを模倣しようとしているようなものです。
-
GET /users?id={id} GET /users?email={email}
- フィルタリングにクエリパラメータを使用するというのは、正鵠を射ていると思います。
-
このリソースを
の両方
という
id
とemail
(例えばGET /users?id={id}&email={email}
)? もしそうでなければ、このような単一のリソースメソッドを使用することはないでしょう。 -
を取得するためのこのメソッドを期待します。
リスト
を取得するためのメソッドであり、フィルタリングのためのオプションのクエリパラメータが必要です。
id
,email
または任意の一意な識別子をパラメータとして指定します。例えばGET /users?status=BANNED
は禁止されたユーザーのリストを返すかもしれません。
チェックアウト この回答 を参照してください。
関連
-
[解決済み] SOAPとRESTの比較(相違点)
-
[解決済み] RESTリソースの命名規則はSingularとPluralのどちらを使用すべきですか?
-
[解決済み] RESTを理解する。動詞、エラーコード、認証
-
[解決済み] RESTアプリケーションはステートレスであることが前提である場合、セッションはどのように管理するのですか?
-
[解決済み] URLクエリパラメータを含むHTTP POST -- 良いアイデアかどうか?
-
[解決済み】REST APIでのPUTメソッドとPATCHメソッドの使い分け 実生活でのシナリオ
-
[解決済み】node.jsでセキュアなREST APIを実装する方法
-
[解決済み】REST API 404。不正な URI、またはリソースの欠落?
-
[解決済み] HTTP DELETEでリソースを2回目に削除したときのステータスコード
-
[解決済み] RESTを使った複数レコードの削除
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
-
[解決済み] cURLでPUTリクエストを行うには?
-
[解決済み] 検索のためのRESTfulなURL設計
-
[解決済み] REST Web アプリケーションのページネーション
-
[解決済み] REST API 認証
-
[解決済み] HTTP DELETEでリソースを2回目に削除したときのステータスコード
-
[解決済み] REST - ボディにIDを入れるかどうか?
-
[解決済み] NetflixやTwitterのようなWebサービスにはRESTとSOAPのどちらを使うべきか?[クローズド]
-
[解決済み] Amazon S3 ファイルのダウンロード名を変更する
-
[解決済み] RESTfulなパスワードリセット