แสดงบทความที่มีป้ายกำกับ webservices แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ webservices แสดงบทความทั้งหมด

วันอังคารที่ 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

เว็บเซอร์วิสหนึ่งที่น่าสนใจในการเรียกใช้คือเว็บเซอร์วิสที่ให้การบริการเกี่ยวกับโรงภาพยนตร์ในอเมริกา ซึ่งคือเว็บเซอร์วิสที่ http://www.ignyte.com/webservices/ignyte.whatsshowing.webservice/moviefunctions.asmx โดยที่มีโอเปอเรชันหนึ่งซึ่งถ้าหากเราให้รหัสไปรษณีย์ (zipcode) และ รัศมีของระยะทางของโรงภาพยนตร์กับเมืองที่มีรหัสไปรษณีย์ดังกล่าว เว็บเซอร์วิสจะให้รายชื่อของโรงภาพยนตร์
และภาพยนตร์ที่กำลังฉายในโรงภาพยนตร์ดังกล่าว

ในโค้ดตัวอย่างนี้ สมมุติว่าเราต้องการทราบโรงภาพยนตร์ที่อยู่ในเมืองหรือใกล้เมือง 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

ภาษา PHP เป็นภาษาที่เหมาะสมในการพัฒนาเว็บแอปพลิเคชัน เนื่องจากเป็นภาษาที่ง่าย เรียนรู้ได้เร็ว และสามารถนำมาใช้ได้ฟรี การเรียกใช้เว็บเซอร์วิสด้วยภาษา PHP จึงเป็นที่นิยม ภาษา PHP เวอร์ชันปัจจุบันคือ PHP5 ซึ่งมีความสามารถในการสนับสนุนการเรียกใช้เว็บเซอร์วิสในตัวโดยไม่ต้องดาวน์ โหลดเครื่องมืออะไรเพิ่มเติม ซึ่งจะทำให้ง่ายกว่าการที่ต้องไปดาวน์โหลดเครื่องมืออย่างเช่น NuSOAP ซึ่ง อัปเดตล่าสุดในปี ค.ศ. 2005 อีกทั้งไม่ได้มีกลุ่มผู้ใช้อย่างมากเหมือนกับ SOAP extension ของ PHP5

ใน 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_c"

wsf.log_path="\wsf_c\logs"

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

wsf extension

อ้างอิงจาก

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