วันอังคารที่ 17 กุมภาพันธ์ พ.ศ. 2552
เว็บเซอร์วิสคืออะไร
เว็บเซอร์วิส (Web Services) เป็นการ "บริการ" ที่เป็นระบบซอฟต์แวร์ที่ออกแบบมาเพื่อสนับสนุนการทำงาน ระหว่างคอมพิวเตอร์กับคอมพิวเตอร์ผ่านระบบเครือข่าย โดยที่ภาษาที่ใช้ในการติดต่อสื่อสารระหว่างคอมพิวเตอร์ ซึ่งก็คือภาษาเอกซ์เอ็มแอล (XML) ตัวอย่างเช่น การบริการในการเช็คราคาหุ้นของตลาดหุ้นหลาย ๆ ที่และอ่านข่าวจากแหล่งข่าว ๆ หลายที่โดยให้เฉพาะข่าวของบริษัทที่ผู้ขอใช้บริการสนใจ ผู้ให้บริการเว็บเซอร์วิสหนึ่งอาจจะเป็นผู้ขอบริการเว็บเซอร์วิสอื่น ยกตัวอย่างเช่น เว็บเซอร์วิสที่ให้บริการข้อมูลก่อนการซื้อขายหุ้น อาจจะเป็นผู้ขอใช้บริการของเว็บเซอร์วิสที่ให้บริการการให้ข่าว
ถึง แม้ว่าจะมีเทคโนโลยีอื่นอย่างเช่น DCOM และ RMI ที่ทำให้โปรแกรมและโปรแกรมสามารถคุยกันได้ แต่เทคโนโลยีเหล่านี้มีข้อจำกัดในส่วนของแพลตฟอร์มหรือภาษาที่โปรแกรมจำเป็น จะต้องใช้ตรงกัน ในทางตรงกันข้าม เว็บเซอร์วิสทำให้โปรแกรมที่พัฒนาด้วยภาษาที่แตกต่างกันหรือพัฒนาบนแพลตฟอร์ มที่แตกต่างกันสามารถคุยกันได้ ความสามารถของเว็บเซอร์วิสที่ทำให้โปรแกรมต่างภาษาต่างแพลตฟอร์มต่างอุปกรณ์ อิเล็กทรอนิกส์คุยกันได้นั้น เป็นจุดแข็งของเว็บเซอร์วิส ที่สามารถจะเชื่อมบริการหลายๆอันเข้าด้วยกัน แนวความคิดนี้ได้ถูกนำมาวางแผนและนำเสนอมาตรฐานที่จะทำให้เว็บเซอร์วิส ติดต่อกันได้อย่างมีประสิทธิภาพเช่น การใช้เอกสารภาษา WSDL (Web Services Description Language) ซึ่งเป็นภาษา XML ประเภทหนึ่ง WSDL (Web Services Description Language) ที่มาอธิบายการเรียกใช้เว็บเซอร์วิสซึ่งเปรียบเสมือนการอ่านคู่มือการใช้งาน โปรแกรมนั่นเอง แต่ทว่ามีข้อแตกต่างกันตรงที่ไม่เฉพาะมนุษย์เท่านั้นที่สามารถเข้าใจคู่มือ นั่น โปรแกรมที่สามารถอ่านเอกสารภาษา XML เข้าใจสามารถที่จะเข้าใจเอกสาร WSDL ได้เช่นกัน ซึ่งจากคุณสมบัตินี้ช่วยทำให้การเรียกใช้เว็บเซอร์วิสเป็นไปได้อย่าง อัตโนมัติ
นอก จาก XML จะถูกใช้ในการเป็นภาษาในการอธิบายการเรียกใช้เว็บเซอร์วิสแล้ว XML ยังเป็นภาษาที่ใช้ในการบันทึกข้อมูลระหว่างผู้ให้บริการและผู้ขอใช้การบริ การเว็บเซอร์วิส รูปแบบของข้อมูล XML ที่ใช้ในการติดต่อนี้เรียกว่าSOAP (Simple Object Access Protocol) เนื่องจากข้อมูลที่ติดต่ออยู่ในรูปแบบ XML ทำให้โปรแกรมต่าง ๆ สามารถติดต่อกันได้ ถึงแม้ว่าอาจจะถูกพัฒนาและเรียกใช้บนแพลตฟอร์มที่แตกต่างกัน หรือใช้ภาษาที่แตกต่างกันในการพัฒนา ทั้งนี้เนื่องจาก XML เป็นภาษาอักขระ (text) ซึ่งระบบปฎิบัติการทุกระบบสามารถเข้าใจ นอกจากนี้การที่ XMLมีแท๊ก (tag) และรูปแบบโครงสร้างที่อธิบายข้อมูลด้วยตัวมันเอง ทำให้การเข้าใจและการจัดการข้อมูล SOAP messages นั้นสามารถทำได้โดยโปรแกรมและช่วยทำให้การติดต่อระหว่าง ผู้ให้บริการและผู้ใช้เว็บเซอร์วิสเป็นไปได้อย่างอัตโนมัติ
แต่ อย่างไรก็ตามเว็บเซอร์วิสไม่จำเป็นจะต้องส่งข้อความในรูปแบบ SOAP เท่านั้น หากเป็นซอฟต์แวร์ที่ส่งข้อมูล XML โดยใช้ Internet Protocol จะถือว่าเป็นเว็บเซอร์วิสเช่นเดียวกัน แต่จะอยู่ในประเภท REST Web Service
เนื้อหาของบันทึกปรากฎโดยผู้เขียนคนเดียวกัน (อ กานดา) ที่
http://chatpong.exteen.com/20050814/entry-1
http://gotoknow.org/blog/krunapon/14438
http://gotoknow.org/blog/xmlws/234640
วันอาทิตย์ที่ 15 กุมภาพันธ์ พ.ศ. 2552
การเรียกเว็บเซอร์วิสโดยใช้ PHP
และภาพยนตร์ที่กำลังฉายในโรงภาพยนตร์ดังกล่าว
ในโค้ดตัวอย่างนี้ สมมุติว่าเราต้องการทราบโรงภาพยนตร์ที่อยู่ในเมืองหรือใกล้เมือง Ann Arbor, Michigan ภายในระยะทาง 1 ไมล์ เราจะใส่ zipcode = 48105 และรัศมี = 1
<?php
// โค้ดต่อไปนี้ใช้ wso2 wsf/php ในการเรียกใช้เว็บเซอร์วิส
// ข้อความที่อยู่ใน SOAP request message ที่จะส่งไปให้เว็บเซอร์วิส
$requestPayloadString = <<<XML
<gettheatersandmovies xmlns="http://www.ignyte.com/whatsshowing">
<zipcode>48105</zipcode>
<radius>1</radius>
</gettheatersandmovies>
XML;
try {
//สร้างออปเจกต์ WSClient
$client = new WSClient(
array("to"=>"http://www.ignyte.com/webservices/ignyte.whatsshowing.webservice/moviefunctions.asmx",
"useSOAP" => "1.1",
// หากเรียกผ่านเน็ตเวิร์คของมหาวิทยาลัยจะต้องตั้งค่า proxy host และ proxy port
"proxyHost" => "202.12.97.116",
"proxyPort" => "8088"));
// สร้างออปเจกต์ WSMessage เพื่อจะใส่ข้อความใน Message และระบุ SOAPAction ของโอเปอเรชัน
// ที่เราต้องการเรียกใช้
$requestMessage = new WSMessage(
$requestPayloadString,
array("action" => "http://www.ignyte.com/whatsshowing/GetTheatersAndMovies"));
// ส่งข้อมูลและร้องขอการบริการจากเว็บเซอร์วิส
$responseMessage = $client->request($requestMessage);
} catch (Exception $e) {
if ($e instanceof WSFault) {
printf("Soap Fault: %s\n", $e->Reason);
} else {
printf("Message = %s\n",$e->getMessage());
}
}
// เขียนข้อมูล XML ที่ได้รับลงไปในไฟล์ allResults.xml
$fp = fopen('allResults.xml','w');
$write = fwrite($fp,$responseMessage->str);
fclose($fp);
?>
รูปข้างล่างนี้แสดงข้อมูลในไฟล์ allResults.xml
วันอาทิตย์ที่ 20 เมษายน พ.ศ. 2551
การใช้ PHP5 เรียกเว็บเซอร์วิสแบบ SOAP
ใน PHP5 มี SOAP extension ที่ทำให้การเรียกใช้เว็บเซอร์วิสแบบ SOAP ง่ายขึ้นโดยการใช้คลาส SoapClient
ขั้นตอนวิธีการมีดังต่อไปนี้
1) หากเราต้องการเรียกใ้ช้เว็บเซอร์็วิสแบบ SOAP ใดเราก็ต้องรู้ที่อยู่ของเอกสาร WSDL ของเว็บเซอร์วิสนั้นก่อน เช่น
$client = new SoapClient($wsdl);
ถ้าหากว่าพบปัญหา Class 'SoapClient' not found ให้เพิ่มบรรทัดนี้ในไฟล์ php.ini
extension=php_soap.dll
ซึ่งถ้าหากใช้ระบบปฏิบัติการ Windows ไฟล์ php.ini อยู่ที่ไดเรกทอรี c:\windows
2) จากนั้นใช้ฟังก์ชัน _soapCall เพื่อเรียกใช้เมธอดที่เราต้องการโดยที่จะต้องระบุอินพุตพารามิเตอร์ในรูปแบบอาร์เรย์ เช่น
$result = $client->__soapCall($methodName, array($methodArguments));
3) ถ้าหากเราเรียกใช้เว็บเซอร์วิสที่พัฒนาโดยใช้ Microsoft .NET จะต้องมีการระบุ SOAP Action ในอาร์กิวเมนต์ของฟังก์ชัน __soapCall เช่น
$result = $client->__soapCall($methodName, array($methodArguments), array('soapaction' => $soapAction));
4) ถ้าหากเราเรียกใช้เว็บเซอร์วิสที่พัฒนาโดย Microsoft .NET จะได้ผลลัพธ์ที่อยู่ในรูปออปเจตก์ที่ประกอบด้วยอิลิเมนต์ที่มีชื่อตรงกับอิล ิเมนต์เอาต์พุตตามที่ระบุในเอกสาร WSDL เช่น
echo $result->outputElemName;
เราลองมาดูตัวอย่างของการเรียกใช้เว็บเซอร์วิส ปตท (http://www.pttplc.com/pttinfo.asmx) ซึ่งพัฒนาเป็นเว็บเซอร์วิสแบบ SOAP โดยใช้ C#.NET ด้วยโปรแกรมที่เขียนโดยภาษา PHP ดังนี้
<?php
// ที่อยู่ของเอกสาร WSDL ของเว็บเซอร์วิส ปตท");
$wsdl = 'http://www.pttplc.com/pttinfo.asmx?WSDL';
// สร้างออปเจกต์ SoapClient เพื่อเรียกใช้เว็บเซอร์วิส
$client = new SoapClient($wsdl);
// เมธอดที่ต้องการเรียกใช้ CurrentOilPrice
$methodName = 'CurrentOilPrice';
// อินพุตพารามิเตอร์ของเมธอด CurrentOilPrice คือ
// Language ซึ่งเราตั้งค่าให้เป็น TH ถ้าหากต้องการแสดงผลเป็นภาษาไทย
$params = array('Language'=>'TH');
// ระบุค่าของ SOAP Action URI
$soapAction = 'http://www.pttplc.com/ptt_webservice/CurrentOilPrice';
// ใช้ฟังก์ชัน _soapCall ในการเรียกเมธอดที่ระบุ
// ต้องระบุพารามิเตอร์และ SOAP Action
$objectResult = $client->__soapCall($methodName, array('parameters' => $params), array('soapaction' => $soapAction));
// จะต้องดูค่าฟิลด์ที่ชื่อตรงกับชื่อของอิลิเมนต์ที่ระบุใน
// Output Message ซึ่งในที่นี้ก็คือ
// CurrentOilPriceResult
echo $objectResult->CurrentOilPriceResult;
?>
ซึ่งเราก็จะได้ผลลัพธ์ดังรูปที่แสดงต่อไปนี้
อ้างอิงจาก
PHP: SOAP - Manual http://th.php.net/soap
PHP: SoapClient->__soapCall Manual http://th.php.net/soap_soapclient_soapcall
This blog entry was modified from the blog entry by the same author which is at http://gotoknow.org/blog/xmlws/161546
วันพุธที่ 16 เมษายน พ.ศ. 2551
การติดตั้ง WSO2 WSF/PHP บน Windows
ก่อนที่เราจะติดตั้ง WSO2 WSF/PHP เราจะต้องใช้ PHP เวอร์ชัน 5.2.x ขึ้นไป หากต้องการอัปเกรดเวอร์ชัน PHP ควรจะคัดลอกไฟล์ library ซึ่งขึ้นต้นด้วย lib*.dll ของโฟลเดอร์ php ไปไว้ที่โฟลเดอร์ c:\windows\system32 ด้วย
1) ติดตั้งไลบราลี ที่ WSF จะต้องใช้
1.1) ดาวน์โหลด libxml จาก http://www.zlatkovic.com/pub/libxml
จ ากนั้นให้ unzip ไฟล์ที่ดาวน์โหลดมา และให้คัดลอกไฟล์ libxml2.dll ซึ่งอยู่ในไดเรกทอรี bin ให้ไปไว้ที่ไดเรกทอรีี์ที่อยู่ใน PATH environment
1.2) ดาวน์โหลด iconv จาก http://www.zlatkovic.com/pub/libxml/
จากนั้นให้ unzip ไฟล์ที่ดาวน์โหลดมา และให้คัดลอกไฟล์ iconv.dll
ซึ่งอยู่ในไดเรกทอรี์ bin ให้ไปไว้ที่ไดเรกทอรีที่อยู่ใน PATH environment
1.3) extension open_ssl ซึ่งมีอยู่แล้วใน PHP เวอร์ชัน 5.2.x ขึ้นไป
วิธีการติดตั้ง extension ก็ขอให้ดูที่ http://campus.en.kku.ac.th/node/kanda/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87-php-extension-%E0%B8%9A%E0%B8%99%E0%B8%A3%E0%B8%B0%E0%B8%9A%E0%B8%9A-windows
2) ดาวน์โหลดและติดตั้ง WSF
2.1) ดาวน์โหลดเวอร์ชันไบนารีได้ที่ http://wso2.org/downloads/wsf/php#binary-php
2.2) ทำการ unzip ไฟล์ที่ดาวน์โหลดมาซึ่งเราก็จะได้ไฟล์และไดเรกทอรีที่มีโครงสร้างต่อไปนี้
wso2-wsf-php-bin-1.2.0-win32
| +-- wsf_c
| +-- wsf.dll
| +-- docs
| +-- scripts
| +-- samples
ในที่นี้สมมุติว่าเรา unzip ไฟล์และเปลี่ยนชื่อไดเรกทอรีจาก wso2-wsf-php-bin-1.2.0-win32 เป็น wso-1.2 และเก็บไว้ที่ f:\178375\tools\wso-1.2
2.3) ทำการติดตั้ง extension wsf โดยการคัดลอกไฟล์ wsf.dll ไปไว้ในไดเรกทอรีที่อยู่ใน PATH environment และอยู่ใน c:\php5\ext
และเพิ่มบรรทัด
php_extension=wsf.dll
ในไฟล์ php.ini
นอกจากนี้ต้องเพิ่ม extension xsl โดยการเปลี่ยนจาก
;php_extension=php_xsl.dll
เป็น
php_extension=php_xsl.dll
2.4) ทำการเพิ่มชื่อไดเรกทอรี wso2-wsf-php-bin-1.2.0-win32\wsf_c\lib ไว้ใน PATH environment
2.5) ทำการเพิ่มบรรทัดต่อไปนี้ในไฟล์ php.ini
;wsf
wsf.home="
wsf.log_path="
wsf.log_level=3
อย่างเช่นในการทดลองนี้ก็จะเป็น
;wsf
wsf.home="f:\178375\tools\wso-1.2\wsf_c"
wsf.log_path="f:\178375\tools\wso-1.2\wsf_c\logs"
wsf.log_level=3
2.7) ทำการเพิ่มไดเรกทอรีที่ PHP จะค้นหาไฟล์ include ที่เราจะอ้างอิงถึง ซึ่งจะต้องเพิ่มเพื่อทำให้ WSF/PHP สร้างและทำให้เราเห็นไฟล์ WSDL
include_path = ".;f:\178375\tools\wso-1.2\scripts"
2.8) ทำการทดสอบว่าตอนนี้เรามี extension WSF แล้วเหรอยังโดยการสร้างไฟล์ PHP ที่มีโค้ด หากเราติดตั้ง WSF สำเร็จ เราจะเห็นส่วนหนึ่งของผลรันดังรูปที่ 1
อ้างอิงจาก
http://wso2.org/project/wsf/php/1.2.0/docs/manual.html
This article was also posted by the same author at
http://gotoknow.org/blog/xmlws/160231 http://campus.en.kku.ac.th/node/kanda/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87-wso2-wsfphp-%E0%B8%9A%E0%B8%99-windows
