質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Jersey

JerseyはRESTful な Web サービスの実装を支援するフレームワークのひとつ。Restlet や RestEasyにくらべ、直感的な方法で開発が可能。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

3回答

1989閲覧

ディレクトリ構造のurlについて

退会済みユーザー

退会済みユーザー

総合スコア0

Jersey

JerseyはRESTful な Web サービスの実装を支援するフレームワークのひとつ。Restlet や RestEasyにくらべ、直感的な方法で開発が可能。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2019/02/06 07:15

ディレクトリ構造のurlについてわからないことがあります。

いくらか調べたところ、restという設計モデルを用いた技術らしいのですが、いまいち、仕組みが理解できません。

例えば、ある画面でとあるユーザー名(<a href="../user/:id"></a>)をクリックすると、サーバー側(java)でgetしたそのユーザーの情報がjson形式で帰ってくるとして、そのjsonは元のhtmlファイル(JS)内で取得され、表示されるのでしょうか? それとも移った後のhtmlファイル(JS)内でしょうか?  それともこの質問自体がおかしいでしょうか?

また、もしよければ、その処理の流れをコードで示してくれると助かります。お願いいいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

URLというのはもともとディレクトリ構造なもんですが。

投稿2019/02/06 07:28

編集2019/02/06 07:28
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/06 07:32

例えばこの質問のurlのような /questions/172980 についてです。最後に拡張子がついていないようなurlのことです。
guest

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
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/06 08:12

アドバイスありがとうございます。勉強します。
退会済みユーザー

退会済みユーザー

2019/02/06 09:07

追加の情報ありがとうございます。
guest

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
root_jp

総合スコア4666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/06 07:52

詳細な回答をありがとうございます。 元のHTMLのままとうことならば、SPAのような技術を用いることになるのでしょうか? また、サーバーでhtmlを作成する場合、そのhtmlが長くなることもあると思うのですが、それを全て、サーバー側で表示させるのでしょうか?
root_jp

2019/02/06 08:01

SPAで使われる技術ですが、SPAである必要は全くありません。 しかし、イメージ的にはそのような認識でいいと思います。 ようは、ブラウザで再読込させることなく、取得と表示を行っているというだけです。 サーバーでHTMLをレスポンスとして返す場合は、ページ全体を作成するわけですから、当然長くなるものです。 また、サーバー側で表示という表現は適切ではありません。 サーバーから返ってきたHTMLをブラウザで表示です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問