1. ホーム
  2. rest

[解決済み] REST API DESIGN - 異なるパラメータを持つが同じURLパターンでRESTを通してリソースを取得する。

2022-09-28 22:33:47

質問

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} があっても不思議ではありません(私の意見では、冗長ですが)。

他のアプローチに関するコメント

  1. GET /users/id={id} GET /users/email={email}
    • これは見たことがないような気がしますし、もし見たとしても非常にわかりにくいでしょう。パスパラメータでクエリパラメータを模倣しようとしているようなものです。
  2. GET /users?id={id} GET /users?email={email}
    • フィルタリングにクエリパラメータを使用するというのは、正鵠を射ていると思います。
    • このリソースを の両方 という idemail (例えば GET /users?id={id}&email={email} )? もしそうでなければ、このような単一のリソースメソッドを使用することはないでしょう。
    • を取得するためのこのメソッドを期待します。 リスト を取得するためのメソッドであり、フィルタリングのためのオプションのクエリパラメータが必要です。 id , email または任意の一意な識別子をパラメータとして指定します。例えば GET /users?status=BANNED は禁止されたユーザーのリストを返すかもしれません。

チェックアウト この回答 を参照してください。