เว็บเซอร์วิส และพื้นฐานการสร้างเว็บเซอร์วิสสารบัญ
ส่วนที่ 1 สำหรับบุคคลทั่วไปและผู้พัฒนาเว็บอะไรคือเว็บเซอร์วิส
เว็บเซอร์วิส ประกอบด้วยอะไรบ้าง ?
ส่วนประกอบของเว็บเซอร์วิส แอพพลิเคชั่น - สิ่งที่ขาดไม่ได้ก็คือแอพพลิเคชั่นที่ให้บริการเว็บเซอร์วิสนั่นเอง แอพพลิเคชั่นที่จะให้บริการเว็บเซอร์วิส ควรจะอยู่บนเครื่องเว็บเซิฟเวอร์ที่เปิดให้บริการตลอดเวลา สามารถติดต่อด้วยโพรโตคอล HTTP ได้ และพัฒนาด้วยภาษาที่มีความสามารถจัดการกับ SOAP โดยอาจเป็นโมดูลเสริม หรือมีคลาสให้เรียกใช้งานก็ได้ ไม่อย่างนั้นคุณอาจจะต้องพัฒนาโปรแกรม ให้สามารถรับ/ส่งข้อมูลในรูปแบบ SOAP ด้วยตนเอง ซึ่งวิธีหลังนี้จะลำบากกว่ากันมิใช่น้อย ตัวอย่างของภาษาที่มีโมดูลสำหรับจัดการกับ SOAP ให้ใช้งาน ได้แก่
เมื่อผู้พัฒนาแอพพลิเคชั่น ต้องการใช้งาน เว็บเซอร์วิส ผู้พัฒนาก็เพียงแค่เขียนโปรแกรมเพื่อติดต่อกับโมดูล SOAP ในภาษาที่ตนใช้ จากนั้น SOAP ก็จะสร้าง SOAP message เพื่อติดต่อกับแอพพลิเคชั่นปลายทางให้โดยอัตโนมัติ ตัวอย่างของ SOAP messages จากตัวอย่างข้างล่าง เป็น SOAP message ที่จะไปเรียกใช้เว็บเซอร์วิส ของห้องสมุด เพื่อถามข้อมูลเกี่ยวกับหนังสือที่มีรหัสตรงกับ 954839
และตัวอย่างต่อไปนี้คือ SOAP message ที่ถูกส่งกลับมาจากเว็บเซอร์วิสของห้องสมุด
ซึ่งมีข้อมูลเกี่ยวกับชื่อหนังสือ คำอธิบาย ชื่อผู้แต่ง และสถานะของหนังสือ
เพื่อให้เข้าใจบทบาทของ WSDL ได้เร็วขึ้น ผมขอยกตัวอย่างการเรียกใช้เว็บเซอร์วิส
แบบไม่ใช้ WSDL เปรียบเทียบกับแบบที่เรียกใช้เว็บเซอร์วิสผ่าน WSDL
แบบที่ 1 เรียกใช้เว็บเซอร์วิส โดยไม่ใช้ WSDL
ทีนี้ลองมาดูการเรียกใช้งาน Web Service โดยใช้ wsdl กันบ้าง
แบบที่ 2 เรียกใช้เว็บเซอร์วิส โดยใช้ WSDL
จากการเปรียบเทียบตัวอย่างทั้งสองที่ยกมาข้างต้น จะเห็นว่า WSDL ช่วยให้การเรียกใช้งานเว็บเซอร์วิส สะดวกขึ้นมากทีเดียว
ส่วนเนื้อหาภายในไฟล์ WSDL นั้น ผู้อ่านสามารถเข้าไปดูได้ที่ URL
http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl
ซึ่งรายละเอียดโครงสร้างภายในไฟล์ WSDL จะเป็นอย่างไรนั้น จะขอยกไปอธิบายในเรื่องการสร้างบริการเว็บเซอร์วิส ในภายหลัง
หน้าที่ของ UDDI จะคล้ายกับ เว็บไดเรกทอรี กล่าวคือ UDDI ช่วยให้ผู้พัฒนา Web Service
ได้ประกาศหรือประชาสัมพันธ์บริการของตนเองสู่สาธารณะ และช่วยให้ผู้ใช้ Web Service
ค้นพบ Web Service ที่ต้องการใช้งาน
สิ่งที่เราต้องทำก็คือ แอพพลิเคชั่นสำหรับบวกเลข จากนั้นจึงพัฒนาให้มีการรับอินพุตและ
ส่งค่ากลับด้วย SOAP และในขั้นสุดท้ายก็คือการสร้าง wsdl สำหรับอธิบายการ
เชื่อมต่อกับเว็บเซอร์วิสบวกเลขนี้
ฟังก์ชั่นบวกเลข แอพพลิเคชั่นแรกที่จะทำให้เป็นเว็บเซอร์วิส
plus_server.php
ในขั้นต่อไปเราจะเอาฟังก์ชั่นนี้มาทำให้มันรับและส่งข้อมูลด้วย SOAP
plus_server.php
คำสั่ง new SoapServer() เป็นการสร้างออบเจ็กต์ SoapServer โดยระบุ wsdl ไปที่ไฟล์ plus.wsdl
ต่อไปคือการสร้างไฟล์ plus.wsdl ไฟล์ wsdl มีหน้าที่ในการประกาศ
ว่าเว็บเซอร์วิสนั้นให้บริการอะไรบ้าง และจะติดต่อได้อย่างไร
มีพารามิเตอร์อะไรบ้าง ซึ่ง plus.wsdl มีรายละเอียดดังนี้
จากไฟล์ wsdl ข้างต้น จะเห็นว่าไฟล์ wsdl มีโครงสร้างดังนี้
------- <message>-------
<message name='plusRequest'>
เป็นส่วนที่กำหนด messages ที่ใช้ในการติดต่อระหว่าง Client กับเว็บเซอร์วิส
ในตัวอย่างนี้ มี 2 messages คือ
<portType name='plusPortType'>
เป็นส่วนกำหนดโอเปอร์เรชั่น (ฟังก์ชั่นที่เรียกใช้งานได้) และประกาศ messages ที่
ใช้เป็นอินพุตและเอาต์พุตของโอเปอร์เรชั่น ในตัวอย่างนี้คือการประกาศโอเปอร์เรชั่น plus
โดยมี plusRequest messages เป็นอินพุต และ plusResponse เป็น เอาต์พุต
<binding name='plusBinding' type='tns:plusPortType'>
ส่วน binding เป็นการกำหนดว่า messages จะถูกส่งและเข้ารหัสอย่างไร ในที่นี้เรากำหนดให้ส่ง
RPC (Remote Procedure Call) โดยใช้ SOAP บน HTTP นอกจากนี้ยังมีการ
กำหนด namespace และ SOAPAction header สำหรับเมธอด plus() อีกด้วย
<service name='plusService'>
ส่วน service เป็นส่วนที่กำหนด URL ของเว็บเซอร์วิส
บางครั้งท่านอาจพบ wsdl บางตัวมีการใช้ message สำหรับส่งตัวแปร
ที่นอกเหนือไปจากชนิดตัวแปรทั่วไป wsdl จะใช้ xml schema
ในการประกาศชนิดตัวแปรด้วย <Type>
ทดลองสร้าง Client สำหรับติดต่อกับเว็บเซอร์วิส
เมื่อเราสร้างเว็บเซอร์วิสฝั่งผู้ให้บริการเสร็จแล้ว ต่อไปคือการ
ทดลองสร้างแอพพลิเคชั่น ที่เรียกใช้งาน WebService
ซึ่งจะเรียกใช้งานผ่านทาง plus.wsdl
plus.php
ไฟล์นี้จะไปติดต่อกับ plus.wsdl เพื่อสร้างออบเจ็กต์ $client ขึ้นมาสำหรับเรียกใช้งานเว็บเซอร์วิส
จากนั้นก็ใช้เมธอด plus() ในการบวกเลข ซึ่ง 5 และ 6 จะถูกส่งไปประมวลผลที่เซิฟเวอร์ เมื่อเซิฟเวอร์ประมวลผลเสร็จ
ก็จะส่งกลับมาให้ออบเจ็กต์ $client ซึ่งออบเจ็กต์ $client จะเป็นคนจัดการการรับ-ส่งข้อมูลผ่าน SOAP ให้เรา
ถึงตรงนี้บางท่านคงจะสงสัยว่า SOAP messages ที่ส่งไปส่งมา
ระหว่างเว็บเซอร์วิสและฝั่ง client นั้น จริงๆแล้ว เป็นอย่างไร
ซึ่งบทความนี้ก็ได้ยกตัวอย่างของ SOAP messages ไปแล้วในตอนต้น
แต่เพื่อความเข้าใจมากขึ้นจะขอแนะนำเมธอด SoapClient->__getLastRequest()
และ SoapClient->__getLastResponse() สำหรับแอบดู
SOAP message ของเว็บเซอร์วิสบวกเลขนี้อีกครั้งหนึ่ง
plus2.php
จากตัวอย่างข้างต้น
SoapClient->__getLastRequest() ใช้สำหรับ
เรียกดู SOAP message ที่ส่งไปครั้งล่าสุด
SoapClient->__getLastResponse() ใช้สำหรับ
เรียกดู SOAP message ที่ได้รับครั้งล่าสุด
การเรียกดูฟังก์ชั่นของเว็บเซอร์วิส
ใน php5.0 หากเราต้องการทราบว่าเว็บเซอร์วิสนั้นมีโอเปอร์เรชั่นอะไรให้เรียก
ใช้บ้าง ก็สามารถเรียกดูได้ด้วยฟังก์ชั่น SoapClient->__getFunctions()
ดังตัวอย่าง
plus3.php
ข้อมูลอ้างอิง
บทความโดย ::ฝ่ายวิจัยและพัฒนาเว็บแอพพลิเคชั่น สำนักบริการเทคโนโลยีสารสนเทศภาครัฐ |
บริการเว็บเซอร์วิส
|