ディレクトリ構造のurlについてわからないことがあります。
いくらか調べたところ、restという設計モデルを用いた技術らしいのですが、いまいち、仕組みが理解できません。
例えば、ある画面でとあるユーザー名(<a href="../user/:id"></a>)をクリックすると、サーバー側(java)でgetしたそのユーザーの情報がjson形式で帰ってくるとして、そのjsonは元のhtmlファイル(JS)内で取得され、表示されるのでしょうか? それとも移った後のhtmlファイル(JS)内でしょうか? それともこの質問自体がおかしいでしょうか?
また、もしよければ、その処理の流れをコードで示してくれると助かります。お願いいいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
URLというのはもともとディレクトリ構造なもんですが。
投稿2019/02/06 07:28
編集2019/02/06 07:28総合スコア87774
0
WebサーバやHTTP通信関係の理解がかなり不足しているように見受けられます。
何となく理解は出来ているのだと思いますが、
ここまで酷い文章だとは…と絶句しましたので、
人に説明出来るレベルの理解には到達出来てないと思います。
rest絡みは難解なので根っこのHTTPを解説している本でも買って勉強しましょう。
それくらいの理解の深さが必要になる話です。
最後に拡張子がついていないようなurlのことです。
Webサーバってのはそもそも返す情報が決まっていません。
HTML、CSS、JS、画像、CSV、JSON、XML……どれもファイルを開けば文字列なんで文字列にしてなんでも送受信出来ます。
それをして良いのがWebサーバで、基本的にはHTTPレスポンスのヘッダーにあるContent-Typeに書いておくから、ブラウザはそれ見て判断しろと言っています。
Apacheなどの静的ファイルを配信するのに特化したWebサーバアプリは、
URLとマシン内の特定のディレクトリを一致して、ファイルの拡張子等を確認しながら
Content-Typeの部分を制御しています。
という訳で、拡張子があるかないかは別に関係ないし、Webサーバの要件でもありません。
単にApacheというアプリがそういう作りにしてるし、静的ファイルなら拡張子も用意した方が分かりやすいしファイル名被りも起こらなくて良いでしょ?くらいでしかありません。
しっかりURLが一意になるように気をつけていれば良いだけの話です。
restという設計モデルを用いた技術らしいのですが、
とりあえずrestというのはRESTfulの事を指しているのでしょうね。
これは一言で言ってしまえば、HTTP通信が持っているルールへの制限です。
RESTfulという設計モデルに従うことで、
オレオレでトンチンカンな動きをしないWebサーバを構築できます。
また、利用者が使いやすいWebサーバを構築しましょうという思想を指します。
まぁ、ブラウザなら別に多少へんてこな動きしても良いんですよ。
リンククリックして、フォームに入力して、掲示板にエラー無く書き込めたり出来れば。
「エラーが出ずにWebサイトを閲覧出来れば」
でもWebサーバやHTTP通信ってのは「人がブラウザを起動して、ブラウザ越しに閲覧する」以外にも
多くの使い方が存在します。
Googleが巡回してきてページ情報を持ち帰り、
検索エンジンとして使うようなやり方がありますね。
これは人間以外がHTTPを利用する例の一つです。
これは私の失敗例の一つです。
ブラウザ上からTODOを管理してデータベースへ書き込むアプリを作って公開しました。
その時にTODOリストはリンクで削除出来れば便利だよなと思い、
Getパラメータに削除用のコマンドとIDを付加し、TODOの右端にaタグとして設置しました。
これをWebサーバにアップロードして、
自分だけがアクセス出来る仕組みとして利用していました。
最初は良かったのですが、定期的にTODOが全部消えるという不具合が発生しました。
愉快犯が見つけて意地悪してるのかなどと思っていましたがアクセスログを見ると一目瞭然。
Googleが目ざとく見つけて来て、
用意してある削除用のリンクを全部踏みやがったのが原因です。
それを友達に愚痴ったら
「そりゃお前が悪い、なんでGETで消えるんだよwww」…と馬鹿にされました。
その後、RESTfulという名前だけもらい、
涙目になりながらググりまくって学習することになりました。
これがRESTfulを採用すべき大きな理由です。
何を言ってるのかわからんと思いますが、HTTPの仕様を理解して、
その後にRESTfulの思想を理解してください。
以下はHTTP通信周りの勉強が終わったと想定しての説明になります。
まずHTTPリクエストのヘッダー部にあるURLとメソッドに関して、
RESTfulはそれに意味を付与することで制御しましょうと言っています。
URLは全世界でユニークなりソースを持つものとして表現されます。
それに対してGET/POST/PUT/DELETEの4種類のメソッドで読み書き削除をしたいというリクエストとして扱いましょうという発想です。
(最近はPUTじゃなくてPATCHの方が良くね?みたいな話もありますが)
- GET: /users/ ユーザ一覧のデータが帰ってくる
- GET: /users/1 ユーザのID1の詳細情報を取得する
- POST: /users ユーザ情報に新しい情報を追加
- PUT: /users/1 ユーザのID1の情報を更新する
- DELETE: /users/1 ユーザのID1の情報を削除する
もちろん、悪意の第三者に貴重なデータを盗まれたり、削除されないよう、
ログインシステム等を別途構築するなどして、公開する情報、読み書き出来る情報を制御しましょう。
ログインユーザがAさんの場合は/usersにアクセスしてもAさんのIDしか教えない、
ログインユーザがBさんの場合は/usersにアクセスするとAさんとBさんのIDが帰ってくる
こんな感じ
おまけ: restとRESTfulに関して
RESTfulなのにrest、restってなんだよ問題があります。
これは調べても中々出てこないと思うので先に共有します。
一般的にrestと呼ばれるのは、
RESTful思想にしたがって作られた、JSONを返すWebサーバを指します。
現場では表記揺れとして、WebAPI、API、RestAPI等と呼ぶ事もあります。
JSONで返すのは単純にJavaScriptがAjaxを使って読み書きする時に都合が良いだけの話です。
昔は超重いXMLファイルとかでやってて、エンジニア達は「俺らちょっとしたデータが欲しいだけなのに、なんでこんな苦行みたいなコード書いてようやっとデータを取り出してるんだ?アホじゃねーか」みたいな事を愚痴っていましたね。
ただしJSONは好き勝手記述出来るファイルフォーマットなので、
フロントエンド側、バックエンド側のデータ様式のやり取りは確実に行うようにしてください。
投稿2019/02/06 08:05
編集2019/02/06 08:37総合スコア21158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/02/06 09:07
0
JavaScriptで取得して、元のHTMLのまま表示するようにすることもできますし、
サーバーの処理の中で、そのURLにリクエストを送り、データをJSONで受け取り、
そのデータを使ってHTML(移った後のhtmlとおしゃっている部分)を作成し、レスポンスに出力するということもできます。
以下はJavaScriptで取得する例です。
HTML
1<a href="../user/100001" id="anchor">ユーザー情報取得</a> 2<input type="text" id="user-id"> 3<input type="text" id="user-name">
JavaScript
1document.querySelector("#anchor").addEventListener("click", evt => { 2 evt.preventDefault(); 3 fetch(evt.target.href) 4 .then(res => res.json()) 5 .then(user => { 6 document.querySelector("#user-id").value = user.id; 7 document.querySelector("#user-name").value = user.name; 8 }); 9}, false); 10
投稿2019/02/06 07:45
編集2019/02/06 08:06総合スコア4666
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/02/06 07:52
2019/02/06 08:01
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/02/06 07:32