Webサービス

2005年度
情報システム構成論
第13回 Webコンテンツ/サービス
西尾 信彦
[email protected]
立命館大学
情報理工学部 情報システム学科
ユビキタス環境研究室
World Wide Web
• HypertextとHyper Linkにより世界中に張り巡らさ
れた分散型コンテンツ
• アクセスが安易であり,携帯電話,PC,情報家電
などさまざまな機器から利用可能
• URLにより世界中のページを一意に指定可能
• ユーザ⇔サービス提供者間の重要なインター
フェイスになっている
• サービス提供者はWebサーバを構築しているこ
とが多いため、Web閲覧以外に分散アプリケー
ションとして利用する場面が増えてきている
HTML
(Hypertext Markup Language)
• 文章中に構成情報を組み込める
• 文章間の関連情報を組み込める
– Hyper Link (一般的なリンクのこと)
• 静的コンテンツ
– 動きが無く、事前に用意した物を見せるだけ
– 利用者からの返答などが受け取れない
HTTP
(Hypertext Transfer Protocol)
• 短期コネクション型のためほぼス
テートレス
•
•
•
•
•
クライアント-サーバ間でデータをやり
取りするためのプロトコル
要求とレスポンスからなり、一回のや
り取りごとにTCPセッションが終了する
HTTP1.1以降では一回ごとにTCPセッ
ションを切断しないKeep Aliveモードも
存在する
レスポンスはバイナリで返されるが、
Webページなどの場合、バイナリ⇒文
字列⇒文字列解析という手順でブラウ
ザでビジュアル構築される
実際のところ、文字列でやり取りされ
ているだけなので、telnetなどで通信を
再現することも可能(右参照)
telnet www.ubi.is.ritsumei.ac.jp 80
Trying 172.25.12.192...
Connected to www.ubi.is.ritsumei.ac.jp.
Escape character is '^]'.
GET /index.html HTTP/1.0
HTTP/1.1 200 OK
・
・
・
<html>
<head>
<meta http-equiv="content-type"
content="text/html;charset=Shift_JIS">
<meta name="generator" content="Adobe GoLive 5">
<META NAME="author" CONTENT="ruec">
<META NAME="description" CONTENT="ユビキタス環境研究室">
・
・
・
</html>
静的コンテンツからの脱出
• クライアントサイド動的コンテンツ
– HTMLなどに組み込まれたスクリプトなどに従い、クライアン
トサイドで動的にコンテンツを動かす
– 動作の可否・速度などはクライアントに依存する
– Java Applet, JavaScript, DHTMLなど
• サーバサイド動的コンテンツ
–
–
–
–
クライアントの要求に従い、動的にHTMLを構築する
基本的にリンクがトリガーになる
クライアントではHTMLに対応するだけでよい
CGI, Servlet, JSPなど
Java Applet
• ネットワーク経由でバイナリファイルがダウン
ロードされ、ブラウザなどに組み込まれたJava
VMで実行される
• 個別にセキュリティを設定でき、守らせることが
出来るのでセキュリティ的に強い
• 基本的にプログラムであるため、設定されてい
るセキュリティポリシー内であれば何でも出来る
– ウィンドウ表示、動画表示、ネットワークゲーム、
チャット(メッセンジャー)などなど
• 一時期は完全なる動的コンテンツが作成できる
ことで注目された
現在のJava Applet
• 以下の理由により現在はあまり使わ
れていない
– ネットワーク転送に時間がかかること
– 実行速度がクライアント依存
– Java VM経由で起動のため起動までに
時間がかかる(クライアント依存)
JavaScript
• 初期に登場したクライアントサイドスク
リプト言語(NetscapeのLiveScript)
• 動作がクライアントのブラウザ依存で
あるが、比較的軽い
• 独自のウィンドウを開いたりすること
は出来ず、ブラウザを操作する(ブラ
ウザで可能なことに限る)
DHTML(Dynamic HTML)
• JavaScriptやVB Scriptなどを埋め込み、動的コ
ンテンツ作成用に拡張されたHTML
• MicrosoftとNetscapeがHTMLを独自拡張したも
の(1997)
• 現在、主要ブラウザ間で仕様が異なるため、
W3Cが仕様を策定中
• 代表的な機能としてDOMなどがある
– DOM(Document Object Model)
• 画像や文字などをすべてオブジェクトとして扱い、移動や
属性変更などを可能にしたもの
クライアントサイドの動向
• 現在、クライアントサイドでの処理はあまり
歓迎されていない
– 理由
• クライアント依存で利用の可否が決まる
• クライアントへの転送量が増える
• 正常動作テストが行いづらい
– 全環境のクライアントを用意するのは不可能
• 事前の入力漏れチェックや比較的簡素な
動作を実行するのに使われている
CGI(Common Gateway
Interface)
• 名前からもわかるように、プログラムへのゲートウェイ
という意味
• サーバ側でプログラムを実行し、標準出力にHTMLと
して出力された文字列をWebページとして表示する
• サーバが対応していなければ利用できない
CGI(2)
• CGI自身はプログラムなので、背後にどの
ようなプログラムが存在していてもよい
– C言語、Perl、Ruby、PHPなど
• 文字列操作に強い言語が選ばれることが
多い
– 一番代表的なものとしてPerl
– 最近プログラムが容易で機能豊富なため台頭
中のPHP
CGIの送信形式(1)
• GET型
– 標準のHTML取得要求アドレスの末尾に必要事項を付加して要
求する(例)
• http://www.ubi.is.ritsumei.ac.jp/cgi/test.cgi?user=xxx
– ?以降がデータ部、送信先では環境変数として認識される
– サーバの処理系が許容している長さ以上の環境変数は利用でき
ない。
– 送信内容がブラウザのアドレス表示部に見えてしまう
• パスワードなどの送信時には利用するべきではない
HTML要求部が下記のように変わるだけ
GET /hoge.cgi?data1=hoge1&data2=fuga HTTP/1.0
• POST型
CGIの送信形式(2)
– HTML取得要求は普通のアドレスで要求し、追加
データとしてデータを送信する
– 送信データはサーバ側でプログラムへの標準入力と
して処理されるため、制限は無い
– 大量のデータ送信時の性能はネットワーク性能に左
右される
//GETの代わりに以下のPOSTを使う
POST /bar.cgi HTTP/1.0
Content-Length: 渡したい文字列の長さ
(空行)
hoge=fuga&hoge2=fuga2&....
Servlet
• Javaで実装されたCGIのようなもの
• Webサーバ以外にServletコンテナが必要になる
• CGIと違い、要求ごとにプログラムが起動され
ず、二回目以降は高速に動作する
• プログラムが終了しないため、以前の通信内容
を覚えておくことが可能
CGIやServletの利点・欠点
• 利点
– 動的コンテンツを作成できる
– 比較的簡単にプログラム可能
• 欠点
– 基本的にプログラムであるため、Webデザイナ
にとってわかりづらい
– 画面変更のみでも、プログラム変更が必要に
なり、再テストが必要になる
Webデザイナ・プログラマの共存
• 企業などではWebページを専門家がデザインし
ている場合が多い
• CGI等はデザイン性が必要になるWebページの
一種であるにもかかわらず,プログラムである
• 下記のような場合は少ない
– プログラマでWebデザインが出来る人
– Webデザイナでプログラムが出来る人
• CGIなどのプログラム部分と画面部分の分離が
必要になる
PHP,SunのJSP,MicrosoftのASPなど
JSP(Java Server Pages)
• WebデザイナにはHTMLにHTMLに似た拡張
タグを追加することでWebページを作成できる
JSPとCGIソース比較(CGI)
#!/usr/bin/perl
$password="password"
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$in{$name} = $value;
}
if ($in{'key'} ne "" && $in{'key'} eq $password}) {
$result = "Logined";
}
else { &error("Authorization Required",“error"); }
}
print<<"EOF"
<html>
<head>
<title>Sing in</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
</head>
<body>
EOF
if($login ne ""){
print $result;
}else{
print<<"EOF"
<SCRIPT language="JavaScript">
<!-function password(f){
var strg;
strg = prompt("パスワード?","");
if (strg != null) {
f.key.value = strg;
f.submit();
}
}
//-->
</SCRIPT>
<form action=index.cgi method=post>
<input type=hidden name=key>
<input type=hidden name=page value="page">
<input type=button onClick="password(this.form)" value="Login">
</form>
EOF
}
print<<"EOF"
<p></body></html>
EOF
JSPとCGIソース比較(JSP)
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/myTag" prefix="myTag" %>
<html:html locale="true">
<head>
<title>Sign in, Please</title>
<%--<html:base/>--%>
</head>
<body bgcolor="white">
<html:errors/>
<body>
<h1>Login</h1>
<myTag:printLoginForm/>
</body>
</html:html>
Webサービス
• HTTP通信を利用しての遠隔プログラム(サービ
ス)呼び出しのこと
• 直接ユーザにページを表示するのではなく、プロ
グラムの一部として動作する
• HTTPによりやり取りするため、端末環境が異
なっていても問題ない
(プログラミング言語的にもOS的にも,ファイヤ
ウォール的にも)
• 今現在確固たる仕様は存在しない
• ディファクトになりつつある仕様
– SOAP+UDDI+WSDL
RPC: Remote Procedure Call
• 遠隔手続き呼出し
• 関数呼出しをネットワークを挟んで行なう
• 呼出し側:
– 呼出す関数とその引数を指定して,
– それらをデータとしたパケットを送り出し,
– 返答を待つ
• 関数側:
– サービスポートに対してリクエストパケットが来るのを
待つ
– リクエストに応じた処理を行ない
– 結果をパケットにつめて送り返す
RPC: Remote Procedure Call
• 呼出し側も関数側もスタブ(切り株)と呼ば
れるライブラリをリンクする
• スタブが呼出しおよび返答のためのネット
ワークアクセスを担う
• スタブを自動生成するために,
– お互いのインタフェース記述の言語
– それを処理するインタフェースジェネレータ
RMI: Remote Method Invocation
• 普通名詞としてのRMIは,オブジェクト指
向プログラミングでRPCを実現すること
• CORBAなどの規格制定より本格化
– ORB: Object Request Brokerの具体化
– LAN内からインターネットワイドに:IIOP
• Javaでの実装はRMIクラスと呼ばれ,RMI
は固有名詞となる
– 実装ではTCP/IPのソケット通信を隠蔽する
RMI: Remote Method Invocation
• 事実上,ファイアウォールに囲まれたイン
ターネットでは利用できない
• 空いているポートはWebアクセスとMailア
クセス
• スタブ生成にXMLを利用するのがはやり
• SOAPはこれらを背景としている
SOAP
(Simple Object Access Protocol)
• Service Oriented Access Protocolとも言われる
• インターネット経由でRPCを行うための規格
• XMLを利用した完全に文字列によるXMLRPCの一種
• HTTP上でXMLを用いて、サービス呼び出し、
返答受信に必要な情報をやり取りする
– 第一引数は何で、返信は何型で値はいくらかなど
XML-RPCの例
POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181
<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param> <value><i4>41</i4></value> </param>
</params>
</methodCall>
WSDL
(Web Service Description Language)
• Webサービス記述言語
• 実態としてはXML
• 2000年9月にW3Cにより、Ver.1.0の仕様策定
が行われた
• Webサービスを利用するためのSOAPのメッ
セージフォーマットを規定する
• 人間の手によって作られることはほぼ無く、
SOAPメッセージなどから自動的に作成する
UDDI
(Universal Description, Discovery and
Integration)
• Webサービスを登録・検索できるディレクト
リサービス
• WSDLを用いてWebサービスが登録される
• Webサービスを必要とするサービスは
UDDIより、必要となるサービスをWSDLの
属性により検索し利用する。
• Webサービスの動的な結合をおこなわない
のであれば必要ない
Web利用の拡大
• 以前はコンテンツ配信のために利用
• 次第にクライアントとの双方向性を持った
対話型サービス提供ツール化
– ショッピング、オークションなど
• 次期Webの利用法として、プログラム間の
RPCをOS,プログラミング言語などに依存
しない形で実現する手段として期待されて
いる