[解決済み] loginやregisterのリソースをRESTfullyにデザインする?
質問
ウェブアプリを設計しているときに、自分の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.
*/
私はこのテーマについて知恵よりも無知を主張しますが、ここにいくつかのリソース設計の考察を示します。
- 消費者: どのリソースがブラウザで直接表示され、XHR を介して読み込まれ、または他の種類のクライアントによってアクセスされることを意図していますか?
- アクセス / ID:レスポンスはクッキーやリファラーに依存するか?
関連
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] RESTリソースの命名規則はSingularとPluralのどちらを使用すべきですか?
-
[解決済み] RESTを理解する。動詞、エラーコード、認証
-
[解決済み] RESTアプリケーションはステートレスであることが前提である場合、セッションはどのように管理するのですか?
-
[解決済み] URLクエリパラメータを含むHTTP POST -- 良いアイデアかどうか?
-
[解決済み] ログアウトする。GETかPOSTか?
-
[解決済み] 検索のためのRESTfulなURL設計
-
[解決済み] RESTのネストされたリソースのベストプラクティスは何ですか?
-
[解決済み】REST APIでのPUTメソッドとPATCHメソッドの使い分け 実生活でのシナリオ
-
[解決済み】ユーザーエージェント文字列の大きさはどれくらいになりますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リソースを "アンキャッシュ" する
-
[解決済み] X-Forwarded-Forヘッダーが表示されないブラウザの理由
-
[解決済み] 検証失敗または重複が無効な場合のREST HTTPステータスコード
-
[解決済み] HTTP DELETE リクエストにエンティティボディは許されますか?
-
[解決済み] ログアウトする。GETかPOSTか?
-
[解決済み] サーバーの1つのポート(例えば80)に複数のクライアントが同時に接続するにはどうすればよいですか?[重複しています]。
-
[解決済み] なぜCSRF防止トークンをクッキーに入れるのが一般的なのですか?
-
[解決済み】全てのブラウザで、Webページのキャッシュを制御するには?
-
[解決済み】Node.jsのほとんどのポートでリスニングするとEACCESエラーが発生する。
-
[解決済み] なぜCache-Control属性はリクエストヘッダ(クライアントからサーバーへ)に送信されるのですか?