1. ホーム
  2. http

[解決済み] loginやregisterのリソースをRESTfullyにデザインする?

2022-05-26 10:49:25

質問

ウェブアプリを設計しているときに、自分のAPIをRESTfulなウェブサービスとしてどのように設計すべきかについて考えるのをやめました。 今のところ、私の URI のほとんどは汎用的で、さまざまな Web アプリに適用される可能性があります。

GET  /logout   // destroys session and redirects to /
GET  /login    // gets the webpage that has the login form
POST /login    // authenticates credentials against database and either redirects home with a new session or redirects back to /login
GET  /register // gets the webpage that has the registration form
POST /register // records the entered information into database as a new /user/xxx
GET  /user/xxx // gets and renders current user data in a profile view
POST /user/xxx // updates new information about user

SOやgoogleで調べてみると、ここが色々間違っているような気がしてきました。

で始まる /logout は、おそらく私は本当にしないので GET にする方が適切かもしれません。 POST へのリクエストは /logout を実行し、セッションを破棄し、その後 GET でリダイレクトします。 そして、本来なら /logout の用語は残るのでしょうか?

どうでしょう /login/register . を変更することができました。 /register/registration を追加しても、私のサービスが基本的にどのように機能するかは変わりません - もし深い問題があるのなら。

今気づいたのですが、私は決して /user リソースを公開していないことに気づきました。 おそらくそれは、何らかの形で利用することができるでしょう。 例えば、ユーザー myUser :

foo.com/user/myUser

または

foo.com/user

エンドユーザーはURIにそのような余分な冗長性を求めません。 しかし、どちらがより視覚的に魅力的でしょうか?

私はこのRESTビジネスについてSOでいくつかの他の質問に気づきましたが、可能であれば私がここにレイアウトしたものについて、いくつかのガイダンスを本当に感謝します。

ありがとうございます。

UPDATEです。

についても、ご意見を伺いたいと思います。

/user/1

/user/myUserName

どのように解決するのですか?

ログアウトにGETリクエストを使用することです。

(以下 http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_methods )

いくつかのメソッド (例えば HEAD, GET, OPTIONS, TRACE) は安全なものとして定義されており、それは情報の取得のみを目的とし、サーバの状態を変更してはいけないということを意味します。言い換えれば、それらはロギング、キャッシュ、バナー広告の配信、ウェブカウンターの増加といった比較的無害な効果以上の副作用を持ってはいけません。[...]

[...] サーバーによる [GET リクエストの] 処理は、技術的に何ら制限されません。したがって、不注意または意図的なプログラミングは、サーバに自明でない変更を引き起こす可能性があります。これはウェブキャッシングや検索エンジン、その他の自動化されたエージェントにとって問題を引き起こす可能性があるため、推奨されません [...] 。

ログアウトとリダイレクトに関しては、ログアウト用URIへの投稿が、ログアウト後のページにリダイレクトする303応答を与えるようにすることができます。

http://en.wikipedia.org/wiki/Post/Redirect/Get

http://en.wikipedia.org/wiki/HTTP_303

URLのデザインに関する懸念に対応するために編集。

"リソースをどのようにデザインするか?"は私にとって重要な質問です。"URLをどのようにデザインするか?"は2つの領域での検討事項です。

ユーザーが目にする URL は、可能であればあまり醜くなく、意味のあるものであるべきです。 あるリソースへのリクエストではクッキーを送信し、他のリソースへのリクエストでは送信しないようにしたい場合、パスとクッキーのパスを構造化したいと思うことでしょう。

もし JRandomUser が自分のプロフィールを見たいと思っていて、その URL が foo.com/user/JRandomUser または foo.com/user/(JRandom's numeric user id here) のように、ユーザーが自分の情報を見るためだけに別の URL を作ることができます。

GET foo.com/profile /*examines cookies to figure out who 
                     * is logged in (SomeUser) and then 
                     * displays the same response as a
                     * GET to foo.com/users/SomeUser.
                     */

私はこのテーマについて知恵よりも無知を主張しますが、ここにいくつかのリソース設計の考察を示します。

  1. 消費者: どのリソースがブラウザで直接表示され、XHR を介して読み込まれ、または他の種類のクライアントによってアクセスされることを意図していますか?
  2. アクセス / ID:レスポンスはクッキーやリファラーに依存するか?