Bài giảng
PHÁT TRIỂN ỨNG DỤNG WEB
1
Lê Đình Thanh Bộ môn Mạng và Truyền thông Máy tính Khoa Công nghệ Thông tin Trường Đại học Công nghệ, ĐHQGHN E-mail: thanhld@vnu.edu.vn, thanhld.vnuh@gmail.com Mobile: 0987.257.504
Bài 8
Web service
2
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
Nội dung
• Web service (WS) là gì? • Vì sao dùng WS? • Tạo WS • Triệu gọi phương thức của WS
– Sử dụng PHP – Sử dụng AJAX – Sử dụng jQuery
3
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
Web service (WS)
• WS là thành phần phần mềm cung cấp các phương thức
(hàm) có thể triệu gọi qua mạng – Tài liệu WSDL (Web Services Description Language) xác định
các phương thức mà WS cung cấp
– Các hệ thống khác triệu gọi phương thức của WS bằng cách gửi cho WS thông báo WS Request và nhận kết quả (giá trị trả về của phương thức) trong thông báo WS Response
WS Request
… v = f(10) … WS Response f(x) g(x, y) h(z) …
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
Application Web Service
Vì sao dùng web service
• Cho phép tích hợp qua mạng giữa các ứng dụng được viết bằng các ngôn ngữ khác nhau trên các nền khác nhau – Tích hợp trong cùng host (thường yêu cầu
cùng nền, cùng ngôn ngữ lập trình) ● Bao hàm tệp mã nguồn: .h, .inc, … ● Thư viện liên kết tĩnh: .lib ● Thư viện liên kết động: .dll
– Tích hợp qua mạng
● Remote Procedure Call (RPC) ● Web service
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
WSDL
• Tài liệu WSDL (Web Service Definition Language) được sử dụng để xác định các phương thức mà WS cung cấp, có thể triệu gọi qua mạng
• Mỗi WS cần có một tài liệu WSDL để
mô tả về nó
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
Triệu gọi phương thức của WS bằng SOAP
• SOAP (Simple Object Access Protocol) là giao thức được sử dụng
nhiều nhất để triệu gọi phương thức của WS – Ngoài ra có thể dùng XML+RPC, REST+JSON, …
• SOAP = HTTP + XML (thông báo SOAP là thông báo HTTP với nội
dung là tài liệu XML có cấu trúc được SOAP quy định)
SOAP WS request
… r = f(10) … SOAP WS response f(x) g(x, y) h(z) …
SOAP WS
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
Application = SOAP client
Thông báo SOAP WS Request
POST /labs/webapp-development/ws/name-service.php
HTTP/1.0
Host: localhost Content-Type: text/xml; charset=ISO-8859-1 Content-Length: 526
HTTP header
ENV:encodingStyle="http://schemas.xmlsoap.org/soap/
encoding/" xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xmlns:SOAP-
ENC="http://schemas.xmlsoap.org/soap/encoding/">
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
HTTP body
Thông báo SOAP WS Response
HTTP/1.1 200 OK Date: Wed, 27 Mar 2013 15:00:17 GMT Server: Apache/2.2.21 (Win32) Content-Length: 531 Connection: close Content-Type: text/xml; charset=ISO-8859-1
HTTP header
ENV:Envelope SOAP-
ENV:encodingStyle="http://schemas.xmlsoap.org/soa
p/encoding/" xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xmlns:SOAP-
ENC="http://schemas.xmlsoap.org/soap/encoding/">
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web. HTTP body • Cho phép mở rộng php_soap
• Tạo thư viện các hàm cho WS
• Tạo tài liệu WSDL mô tả về WS
• Tạo SOAP WS Lê Đình Thanh, Bài giảng Phát triển ứng dụng web. Cho phép mở rộng php_soap – Cấu hình trong php.ini
● extension=php_soap.dll Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
return ucwords(strtolower($ret)); function normalizeName($name, $type) {
$ss = explode(" ", $name);
$ret = "";
for ($i = 0; $i < count($ss); $i++) {
if (strcmp($ss[$i], "") != 0) {
if (strcmp($ret, "") != 0) $ret .= " ";
$ret .= $ss[$i];
}
}
if ($type == "UCW")
return ucfirst(strtolower($ret));
} function ageFromDoB($vd) { //$vd: dd/mm/yyyy
$ss = explode("/", $vd); //tach xau
$age = intval(date("Y")) - intval($ss[2]);
return $age;
}
?> Lê Đình Thanh, Bài giảng Phát triển ứng dụng web. targetNamespace="http://localhost/name" xmlns:tns="http://localhost/name" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" Lê Đình Thanh, Bài giảng Phát triển ứng dụng web. xmlns="http://schemas.xmlsoap.org/wsdl/"> Lê Đình Thanh, Bài giảng Phát triển ứng dụng web. Lê Đình Thanh, Bài giảng Phát triển ứng dụng web. Lê Đình Thanh, Bài giảng Phát triển ứng dụng web. Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
require_once("lib.php"); ini_set("soap.wsdl_cache_enabled", "0");
$server = new
SoapServer("mywebservice.wsdl");
$server->addFunction("normalizeName");
$server->addFunction("ageFromDoB");
$server->handle(); ?> Lê Đình Thanh, Bài giảng Phát triển ứng dụng web. Lê Đình Thanh, Bài giảng Phát triển ứng dụng web. Triệu gọi phương thức của WS bằng
PHP
$client = new SoapClient("mywebservice.wsdl", array('trace' => 1)); $response = $client->normalizeName(" trịnh tố nHư ", "UCW");
if (is_soap_fault($response)) {
echo "Tạo SOAP WS
Tạo thư viện các hàm cho
WS
Tạo tài liệu WSDL mô tả WS
(1/5)
Tạo tài liệu WSDL mô tả WS
(2/5)
Tạo tài liệu WSDL mô tả WS
(3/5)
Tạo tài liệu WSDL mô tả WS (4/5)
Tạo tài liệu WSDL mô tả WS
(5/5)
Tạo SOAP WS
Xem WSDL của WS
".$response->faultcode."
";
echo "".$response->faultstring."
";
} else echo $response;
$r = $client->ageFromDoB("23/5/1992"); if (is_soap_fault($r)) { echo "
".$r->faultcode.""; echo "
".$r->faultstring.""; } else echo " $r";
?>
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
Triệu gọi phương thức của WS bằng PHP
• Xem SOAP WS Request vừa gửi
echo $client->__getLastRequestHeaders(); echo htmlentities($client->__getLastRequest());
• Xem SOAP WS Response vừa nhận
echo $client->__getLastResponseHeaders(); echo htmlentities($client->__getLastResponse());
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
Triệu gọi phương thức của WS bằng AJAX
var httpRequest = getAjaxEngine();
var url = “url-of-web-service”;
var soapMessage = ' ENV:Envelope … '; httpRequest.open("POST", url, true); if (httpRequest.overrideMimeType) { httpRequest.overrideMimeType("text/xml"); } httpRequest.setRequestHeader("Man", url + " HTTP/1.1") httpRequest.setRequestHeader("MessageType", "CALL"); httpRequest.setRequestHeader("Content-Type", "text/xml"); httpRequest.onreadystatechange= function() { if (httpRequest.readyState == 4) { if (httpRequest.status == 200) { document.write( httpRequest.responseText); } } Lê Đình Thanh, Bài giảng Phát triển ứng dụng web. }; httpRequest.send(soapMessage); Triệu gọi phương thức của WS bằng
jQuery • Sử dụng thư viện jQuerySOAP tại https://github.com/zachofalltrades/jquery.soap $.soap({ url: 'http://localhost/labs/webapp-
development/ws/mywebservice.php/', method: 'normalizeName', params: { name: ' hoàng tHANH tÙNG ', type: 'UCW’ }, returnJson: false, success: function (data) { //data là thân của SOAP response. }, error: function (string)
{ document.write(""+string+"
"); }
});
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
Triệu gọi phương thức của WS bằng jQuery
Phân tích SOAP Response
success: function (data) {
var xmlDoc = null;
if (window.DOMParser) {
xmlDoc = new DOMParser().parseFromString(data,"text/xml");
} else {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(data);
}
if (xmlDoc != null) {
document.write(xmlDoc.getElementsByTagName("normalizedName") [0].childNodes[0].nodeValue);
}
document.write("
");
}
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
NuSOAP
• Là SOAP toolkit dùng cho phát triển
SOAP server và SOAP client
• Có thể được sử dụng để phát triển
SOAP WS.
Tự học
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
Công bố và sử dụng WS Kiến trúc WS
Nhà môi giới tạo danh bạ WS
Ví dụ: http://www.xmethods.net
UDDI (Universal Description, Discovery and Integration)
Khách hàng cần sử dụng WS tìm WS trên danh bạ
Nhà cung cấp WS cần quảng cáo về WS của mình cho khách hàng biết
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.
Nguồn: http://en.wikipedia.org/wiki/Web_service
Hết
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.