อินเทอร์เน็ต ได้ทำให้การสื่อสาร ข้อมูลระหว่างมนุษย์เป็นไปได้อย่างรวดเร็วและสะดวก ซึ่งได้มีผลกระทบต่อหลายวงการ อย่างเช่น ในการศึกษานั้น ทำให้ผู้เรียนสามารถศึกษาสิ่งต่าง ๆ ได้จากสื่ออิเลคทรอนิกส์ซึ่งสามารถเข้าถึงได้ผ่านอินเตอร์เน็ต ในการทำธุรกิจ ทำให้เจ้าของผลิตภัณฑ์ พันธมิตรคู่ค้า ตลอดจนลูกค้า มีการสื่อสารและทำงานร่วมกัน ไม่ว่าจะอยู่ในสาขาอาชีพใด การติดต่อสื่อสารและทำงานร่วมกันระหว่างองค์กรนั้นจำเป็นต้องเกิดขึ้น ในอดีตที่ผ่านมาองค์กรต่าง ๆ มักจะประสบปัญหาจากการทำงานร่วมกันโดยใช้แอพพลิเคชันต่างๆ ที่ถูกพัฒนามาจากหลากหลายแพลตฟอร์ม หลากหลายระบบปฏิบัติการ หลากหลายภาษา และถึงแม้ว่าองค์กรต่างๆ สามารถที่จะเชื่อมต่อแอพพลิเคชันต่างๆ เข้าด้วยกันได้ แต่การทำเช่นนั้นก็มีค่าใช้จ่ายที่สูง และมีความซับซ้อนมาก ด้วยเหตุนี้เองที่ทำให้มีความต้องการมาตราฐานกลาง เพื่อทำให้การติดต่อสื่อสารและทำงานร่วมกันองค์กรง่าย และรวดเร็วมากขึ้น มาตราฐานกลางนั่นก็คือเว็บเซอร์วิส
เว็บเซอร์วิส (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
วันอังคารที่ 17 กุมภาพันธ์ พ.ศ. 2552
วันอาทิตย์ที่ 15 กุมภาพันธ์ พ.ศ. 2552
การแปลงไฟล์ XML ให้เป็น HTML โดยใ้ช้ XSL และ PHP
บ่อยครั้งที่ข้อมูล XML ดูยากเพราะเป็นตัวอักขระล้วน ดังนั้นผู้พัฒนาโปรแกรมจึงต้องการนำเสนอข้อมูลที่ดูง่ายกว่าเช่นในรูปแบบ HTML เราสามารถเขียนไฟล์ XSL และแปลงข้อมูลโดยพัฒนาโปรแกรม PHP ได้
เช่น เราต้องการแปลงข้อมูลในไฟล์ allResults.xml ให้เป็นตารางในไฟล์ HTML ดังแสดงในรูปที่ 1 และรูปที่ 2
รูปที่ 1
รูปที่ 2
ในการแปลงข้อมูลนั้นมีได้หลายวิีธี
1) อาจจะเขียนไฟล์ XSL ที่ไปดึงข้อมูลจาก allResults.xml โดยตรงก็ได้
2) ใช้ XML parser เพื่อดึงข้อมูลจาก allResults.xml แล้วเก็บไว้ในไฟล์ results.xml เพื่อให้เขียนไฟล์ XSL ได้ง่ายขึ้น
<?php
// โค้ดนี้ใช้วิธีที่ 2 ซึ่งใช้ XML parser เพื่อดึงข้อมูลจาก allResults.xml
// แล้วเก็บไว้ในไฟล์ results.xml เพื่อให้เขียนไฟล์ XSL ได้ง่ายขึ้น
// เขียน XML declaration ในไฟล์ xml results.xml
$xml_result = "";
$xml_result .= "";
// อ่านข้อมูลจากไฟล์ allResults.xml
$xml = simplexml_load_file("allResults.xml");
// เขียนข้อมูลของอิลิเมนต์ Theater ลงในไฟล์ results.xml
foreach ($xml->GetTheatersAndMoviesResult->Theater as $theater) {
$xml_result .= '';
$xml_result .= htmlspecialchars($theater->Name);
$xml_result .= ' ';
$xml_result .= htmlspecialchars($theater->Address);
$xml_result .= ' ';
}
$xml_result .=" ";
// บันทึกข้อมูลลงไปในไฟล์
$fp = fopen('results.xml','w');
$write = fwrite($fp,$xml_result);
fclose($fp);
// เริ่มทำการแปลงโดยสร้างออปเจตก์ DOMDocument และ XSLTProcessor
$doc = new DOMDocument();
$xsl = new XSLTProcessor();
$xsl_filename = "results.xsl";
// โหลดข้อมูลจากไฟล์ XSL
$doc->load($xsl_filename);
// ระบุว่าให้ใช้ XSLTProcessor สำหรับออปเจกต์ DOM ที่สร้างขึ้นมา
$xsl->importStyleSheet($doc);
$xml_filename = "results.xml";
// โหลดข้อมูลจากไฟล์ XML
$doc->load($xml_filename);
// แสดงผลที่ได้จากการแปลงข้อมูล
echo $xsl->transformToXML($doc);
?>
// ไฟล์ XSL
เช่น เราต้องการแปลงข้อมูลในไฟล์ allResults.xml ให้เป็นตารางในไฟล์ HTML ดังแสดงในรูปที่ 1 และรูปที่ 2
รูปที่ 1
รูปที่ 2
ในการแปลงข้อมูลนั้นมีได้หลายวิีธี
1) อาจจะเขียนไฟล์ XSL ที่ไปดึงข้อมูลจาก allResults.xml โดยตรงก็ได้
2) ใช้ XML parser เพื่อดึงข้อมูลจาก allResults.xml แล้วเก็บไว้ในไฟล์ results.xml เพื่อให้เขียนไฟล์ XSL ได้ง่ายขึ้น
<?php
// โค้ดนี้ใช้วิธีที่ 2 ซึ่งใช้ XML parser เพื่อดึงข้อมูลจาก allResults.xml
// แล้วเก็บไว้ในไฟล์ results.xml เพื่อให้เขียนไฟล์ XSL ได้ง่ายขึ้น
// เขียน XML declaration ในไฟล์ xml results.xml
$xml_result = "";
$xml_result .= "
// อ่านข้อมูลจากไฟล์ allResults.xml
$xml = simplexml_load_file("allResults.xml");
// เขียนข้อมูลของอิลิเมนต์ Theater ลงในไฟล์ results.xml
foreach ($xml->GetTheatersAndMoviesResult->Theater as $theater) {
$xml_result .= '
$xml_result .= htmlspecialchars($theater->Name);
$xml_result .= '
$xml_result .= htmlspecialchars($theater->Address);
$xml_result .= '
}
$xml_result .="
// บันทึกข้อมูลลงไปในไฟล์
$fp = fopen('results.xml','w');
$write = fwrite($fp,$xml_result);
fclose($fp);
// เริ่มทำการแปลงโดยสร้างออปเจตก์ DOMDocument และ XSLTProcessor
$doc = new DOMDocument();
$xsl = new XSLTProcessor();
$xsl_filename = "results.xsl";
// โหลดข้อมูลจากไฟล์ XSL
$doc->load($xsl_filename);
// ระบุว่าให้ใช้ XSLTProcessor สำหรับออปเจกต์ DOM ที่สร้างขึ้นมา
$xsl->importStyleSheet($doc);
$xml_filename = "results.xml";
// โหลดข้อมูลจากไฟล์ XML
$doc->load($xml_filename);
// แสดงผลที่ได้จากการแปลงข้อมูล
echo $xsl->transformToXML($doc);
?>
// ไฟล์ XSL
การเรียกเว็บเซอร์วิสโดยใช้ 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
และภาพยนตร์ที่กำลังฉายในโรงภาพยนตร์ดังกล่าว
ในโค้ดตัวอย่างนี้ สมมุติว่าเราต้องการทราบโรงภาพยนตร์ที่อยู่ในเมืองหรือใกล้เมือง 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
ป้ายกำกับ:
เรียกเว็บเซอร์วิส,
callWS,
PHP,
php5,
webservices,
WSF,
WSO2
สมัครสมาชิก:
บทความ (Atom)