web-dev-qa-db-ja.com

REST URL構造でuserIdを指定する必要がありますか?

基本的に、私のアプリの1つの機能は、ログに記録されたユーザーの友達を取得することです。

実際、私は両方の種類のエンドポイントの間で迷っています:

  1. GET/api/users/friends
  2. GET/api/users /:userId/friends

1を使用すると、認証トークンを通じてuserIdに到達できます。
2を使用すると、サーバーは、渡されたuserIdと、認証トークンで指定されたログに記録されたユーザーIDとの対応関係をさらにチェックして、他のユーザーデータへの悪意のあるアクセスを回避する必要があります。友達。

したがって、1つで十分ですが、標準のレストURLのようには聞こえません。

良い習慣とは何ですか?

9
Mik378

最初のソリューションには、データの重複を回避できるという利点があります。要求は明らかに意味します:

こんにちは、ジョンです。 my友達のリストを送ってください。

可能であれば、GET /api/friends

一方、他のユーザーの友達にアクセスできることを期待している場合は、2番目のソリューションが適切です。リクエストとは:

こんにちは、ジョンです。ジョンの友達のリストをください。

しかし、以下の場合もあります。

こんにちは、ジョンです。メアリーの友達のリストをください。

たとえば、そのような変更が可能な状況の1つは、自分の友達だけでなく、友達の友達も見つけることができる場合です。

7

Rest Apiはハイパーテキスト駆動である必要があります!標準のHTMLページで1つのリンクから別のリンクをクリックするように。

URLは、リソースに対する一意の識別子です。複数のリソースを表すURLを持つことは、ReSTと完全に一致しません。

あなたの例では、次のURL:

/api/users/:userId

:userIdフレンズURLへの応答にリンクが必要です

Roy Fieldingの論文には、ReSTに準拠するために必要な一連の制約が含まれています。

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-drivenhttp://fr.slideshare.net/rnewton/2013- 06q-connycrestfulwebapishttp://www.ics.uci.edu/~fielding/pubs/dissertation/rest_Arch_style.htm