Web技術入門

実験の目的

近年のWebサイトでは、LMSのようにユーザからの入力に応じて表示内容が変化するコンテンツが多数使われている。 この実験ではWebサイトへの簡単なデータの受け渡し方法について実践し、理解を深める。

理論

近年のWebページでは、ユーザからの入力やデータベースの内容に応じて表示内容が変化する動的なページがほとんどを占めている。Webページによる情報公開が始まった90年代初頭においては、HTMLは静的なコンテンツのみを扱うことが多かった。しかしながら、掲示板などによるコンテンツ共有や、ユーザ個人に合わせたページのカスタマイズのためには、Webページを掲載している計算機(Webサーバ)上で、プログラムを動かし、表示するためのHTMLを自動的に生成すること必要である。このような動的なWebページの作成は、C言語などの古典的なプログラミング言語を用いたCGIが使われていたこともあるが、近年はperl,PHPなどのスクリプト系言語を用いて作ることが一般的である。

Webページを表示するための通信プロトコルをHTTP(Hyper Text Transfer Protocol)とよび、Webサーバ上の動的なプログラムとの通信にもこのプロトコルが使われている。代表的なメッセージはGETとPOSTであり、どちらもページのリクエストであるがリクエスト時にパラメータとして値を渡すことができる。また、表示用のHTMLが返信される。Webブラウザは返信されたHTMLを描画し、ユーザにとって視覚的に分かりやすいページとして表示している。

一方で、スマートフォンのアプリケーションのように、アプリケーションとデータサーバのみを通信し、アプリケーションが三次元のアニメーションなどを描画するというケースでも、Webサーバは利用されている。この場合は、データベースやコンテンツサーバとしてサーバを利用するため、HTMLではなく単なるデータをサーバから取得する場合も多い。このデータ構造として、近年はJSON(JavaScript Object Notation)というテキスト形式で、単純だが汎用性の高いデータ構造が広く使われている。

JSONなどを使い、Webサーバ上のデータベースを利用したり、Webサイトに登録されたデータを取り出す、もしくはデータを登録する仕組みも確立されてきている。特にWebサーバ経由で自由にデータをやり取りする枠組みを指してWebAPI(Application Programming Interface)と呼ぶこともある。WebAPIはGoogleMapsやLINEなどのサービスもWebAPIを提供しており、自身のWebサイトに組み込んだり、個人で作ったアプリケーションに組み込むこともできるようになっている。

実験の手順

1. WebサイトへのアクセスとURLでの値渡し

実験用サイト1にアクセスします。

gifu-3ejikken2023.japaneast.cloudapp.azure.com/api/get.php

Array ( )

となっています。これはGETのパラメーターになにも渡されていないことを意味しています。

parameterを追加

get.phpの後に?a=5を追加してアクセスしてみましょう。URLとしては次のようになります。

gifu-3ejikken2023.japaneast.cloudapp.azure.com/api/get.php?a=5

Array()の中身が変わりましたか?

確認1

a5の値を変えて試してみましょう。文字列にしてみたり、限界の長さ(大きさ)を調べてみるとよいでしょう。

課題1

複数の値 a = 5b = 7 を渡す方法を調べ、試してみましょう。

考察のヒント

URLに使えない文字や、parameterに使われている文字を渡すにはどうしたらいいのでしょうか?これらの方法を考察してみるとよいでしょう。

2. POSTによる値渡し

実験用サイト2にアクセスします。

gifu-3ejikken2023.japaneast.cloudapp.azure.com/api/post.php

確認2

先ほどと同じように?を付けて値を渡してみましょう。

→値が何も変わらないことが確認できましたか?

このページはPOSTというメソッドでなければ値が渡せません。このページにPOSTするためのページを使ってみましょう。

gifu-3ejikken2023.japaneast.cloudapp.azure.com/api/postinput.php

確認3

適当な値を入力して Send ボタンを押してみましょう。

確認4

input pageのソースコードを確認して、中に書いてあるキーワードと、確認2で表示された内容がどう対応しているかを確認しましょう。

課題2

postinput.phpのコメント欄に <A href="test.html">hello</A> と記入すると、表示されるページにHTMLを埋め込むことができます。試してみましょう。

考察のヒント

掲示板などで書き込み者が自由にHTMLを記入できると問題になる場合があります。問題点を考察してみてください。

3. Postman を使ってみよう

What is Postman?

Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs—faster.

www.postman.comより引用

今回はクライアントアプリを使います。LMSからアプリを配布してありますので、自分のPCにインストールして使ってください。

Note

共有PCを使いたい、Webブラウザで簡単に済ませたい方は、サインアップ(アカウント登録)が必要です。Googleアカウントを使ってサインアップすると簡単に使えるようになります。職業はstudentsを選べばよいと思います。

アプリを起動し、アカウント登録なしで起動するメニューを押します。

メニューのNEWを押します。

HTTP Request を選びます。

次のような画面が出てくれば送信の準備ができています。

URLのところにGETのテストで利用したURLを入力します。

parameterを入力します。(値は自由です。)その後sendボタンを押しましょう。

実行結果のHTMLが画面下部に表示されます。

確認5

値を変えてGETによる送信を試しましょう。

Postman で POST する

PostmanのメソッドをPOSTに、URLをPOST用のものに変更します。

データのBody領域を選び、種類をform-dataとします。 この状態でparameterの値を入力して、sendを押します。

確認6

POST結果が反映されることを確認し、適当な値にしてみましょう。

課題3

このサイトにGET用のURLでPOSTしたり、POST用のURLでGETしたりするとどうなるか確認してください。ふたつを同時に与えるのもよいでしょう。

考察のヒント

サイトで動かしているPHPのプログラムもLMSに公開してあります。中を見てみると動作についてよくわかることがあるかもしれません。

4. JSONのやり取り

JSONと呼ばれる形式のデータで最近はAPIとやり取りすることが多いです。Postmanを使って、やり取りしてみましょう。

JSON形式のデータを見てみる1:テストサイト編

次のURLにアクセスしてみましょう。

gifu-3ejikken2023.japaneast.cloudapp.azure.com/api/json.php

JSON形式でデータが表示されます。 フォーマットについては別途文献などで調べてみるとよいでしょう。

JSON形式のデータを見てみる2:一般サイト編

次のURLにアクセスしてみましょう。

api.github.com/users

サンプルのデータが見れます。 一般のサイトに、クエリを入れるにはそのサイトに登録して、認証キーをとる必要があります。(アクセス数がカウントされ、多すぎる場合(業務などに使う場合)課金されるケースがほとんどです。)

テストサイトにデータを送ってみる

テストサイトに次のようにGETでデータを送ってみましょう。

gifu-3ejikken2023.japaneast.cloudapp.azure.com/api/json.php?a=8

どのようなJSONデータが帰ってくるかを確認してください。

確認7

次のパラメータを含めてデータを送信して、どのような結果が得られるか確認しましょう。

  • GETを使ってb=5を送る
  • POSTを使ってa=8,f=6を送る

テストサイトにJSONでデータを送ってみる

JSONでデータを送ることもできます。送り先は次のURLとしましょう。

gifu-3ejikken2023.japaneast.cloudapp.azure.com/api/json2.php

送るデータは前の実験で表示されていた

{"a":1,"b":2,"c":3,"d":4,"e":5}

とします。

JSONでデータを送る際は、データの形式をrawとし、直接JSONのデータを貼り付けてください。

課題4

json.php に対して、GETとPOSTを同時に与えて動作を検証しましょう。特に変数aの値はどちらからも指定できます。両方が異なる値を渡した場合の挙動を確認しましょう。

考察のヒント

こちらもPHPのプログラムを見ると動作についてよくわかることがあるかもしれません。

5. 発展課題

一般サイトのAPIに対してPOSTしてみましょう。こちらは選択課題とします。どれか一つ選んでやってみると面白いと思います。

一般のサイトにrequestを送るには、それぞれのサービスのAPIを利用するための登録が必要です。

以下のサイトを参考にWebAPIによるデータの取得をやってみましょう。下に行くほどちょっと難しいかと思います。

WebのAPIがアクセスするためのURLを「エンドポイント」と呼ぶことが多いです。このように、説明文を読んで用語がわからない場合は、他のサイトなども参考にして、調べるとよいと思います。

Google Maps を使ったジオコーディング

位置(緯度経度)と地名の変換などができます。

developers.google.com/maps/documentation/geocoding?hl=ja

YouTubeのデータ検索

動画やグループの検索などができます。

developers.google.com/youtube/v3/getting-started?hl=ja

LINEのAPI

自動でメッセージを送ったり、受信したメッセージに合わせた返事をしたりなどができます。

developers.line.biz/ja/reference/messaging-api