Tải bản đầy đủ (.pdf) (27 trang)

Bài giảng Phát triển ứng dụng web Bài 8 Lê Đình Thanh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (271.93 KB, 27 trang )

Bài giảng

PHÁT TRIỂN ỨNG DỤNG WEB
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: ,
Mobile: 0987.257.504

1


Bài 8

Web service

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.

2


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

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.

3


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

v = f(10)


WS Request


WS Response

Application

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.

f(x)
g(x, y)
h(z)


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



Ngồ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)


r = f(10)


SOAP WS request

SOAP WS response

Application
=
SOAP client
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.

f(x)
g(x, y)
h(z)


SOAP WS


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
<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope SOAPENV:encodingStyle=" />encoding/" xmlns:SOAPENV=" />xmlns:xsd=" />xmlns:xsi=" xmlns:SOAPENC=" />OAP-ENV:Body>xmlns:ns2820="">xsi:type="xsd:string"> hoang THu
</name></ns2820:normalizeName></SOAPENV:Body></SOAP-ENV:Envelope>

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.

HTTP header

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
<?xml version="1.0" encoding="ISO-8859-1"?><SOAPENV:Envelope SOAPENV:encodingStyle=" />p/encoding/" xmlns:SOAPENV=" />xmlns:xsd=" />xmlns:xsi=" xmlns:SOAPENC=" /><SOAP-ENV:Body>xmlns:ns1="">xsi:type="xsd:string">Hoang
Thu</return></ns1:normalizeNameResponse>P-ENV:Body></SOAP-ENV:Envelope>


Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.

HTTP header

HTTP body


Tạo SOAP WS





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.



Tạo thư viện các hàm cho
WS
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 ucwords(strtolower($ret));
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.


Tạo tài liệu WSDL mô tả WS
(1/5)
<?xml version ="1.0" encoding ="UTF-8" ?>

targetNamespace="http://localhost/name"
xmlns:tns="http://localhost/name"
xmlns:soap=" />xmlns:xsd=" />xmlns:soapenc=" />xmlns:wsdl=" />xmlns=" />
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Tạo tài liệu WSDL mô tả WS
(2/5)
<message name="normalizeName_Parameters">


</message>
<message name="normalizeName_Return">

</message>
<message name="ageFromDoB_Parameters">

</message>
<message name="ageFromDoB_Return">

</message>
Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Tạo tài liệu WSDL mô tả WS
(3/5)

<operation name="normalizeName">
<input message="tns:normalizeName_Parameters"/>

<output message="tns:normalizeName_Return"/>
</operation>
<operation name="ageFromDoB">
<input message="tns:ageFromDoB_Parameters"/>
<output message="tns:ageFromDoB_Return"/>
</operation>
</portType>

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Tạo tài liệu WSDL mô tả WS (4/5)
<binding name="mybinding" type="tns:myport">
<soap:binding style="rpc" transport=" />
<operation name="normalizeName">
<soap:operation />
<input>
encodingStyle=" />
</input>
<output>
encodingStyle=" /></output>
</operation>
<operation name="ageFromDoB">
<soap:operation />
<input>
encodingStyle=" />
</input>

<output>
encodingStyle=" /></output>
Lê Đình
Thanh, Bài giảng Phát triển ứng dụng web.
</operation>


Tạo tài liệu WSDL mô tả WS
(5/5)
<service name="myservice">

<soap:address location="http://localhost/labs/webappdevelopment/ws/mywebservice.php"/>
</port>
</service>
</definitions>

Lê Đình Thanh, Bài giảng Phát triển ứng dụng web.


Tạo SOAP WS
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.


Xem WSDL của WS

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 "
".$response->faultcode."</pre>";
echo "
".$response->faultstring."</pre>";
} else echo $response;
$r = $client->ageFromDoB("23/5/1992");
if (is_soap_fault($r)) {
echo "
".$r->faultcode."</pre>";
echo "
".$r->faultstring."</pre>";
} 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 = '<?xml version="1.0" encoding="UTF-8"?> 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.


Triệu gọi phương thức của WS bằng
jQuery


Sử dụng thư viện jQuerySOAP tại
/>
$.soap({
url: 'http://localhost/labs/webappdevelopment/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+"</pre>");
});

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("
<textarea>"+data+"</textarea>");
}
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.



×