การสร้างเว็บเซอร์วิส
ตอนที่ 3 สร้าง Web Services ด้วยภาษา PHP ขั้นแรกสร้าง XML Schema
3. การสร้าง Web Services ด้วยแพลตฟอร์ม PHP
3.1 การสร้าง XML Schema สำหรับ Web Services
3.1.1 วัตถุประสงค์
เราจะสร้าง Web Services ด้วยภาษา
PHP โดยจัดองค์ประกอบตามภาพนี้
สังเกตจากภาพเราจำเป็นต้องทำตามลำดับคือ
สร้างไฟล์ ProductList.xsd ขึ้นมาใช้เป็น Data Type ก่อน หลังจากนั้นสร้างไฟล์ ProductList.wsdl ขึ้นมาเพื่อใช้เป็น
Interface และขั้นที่ 3 สร้างโปรแกรมที่เป็น
PHP ไว้ในไฟล์ ProductList.php และสุดท้ายไปเรียกใช้
Web Services ทางฝั่งไคลเอ็นต์ โดยอาจจะทดลองเป็นโปรแกรมภาษา
Java หรือ .NET ก็ได้
·
การพัฒนา Web Services นี้จึงถูกแบ่งออกเป็น 4 การทดลองคือ
·
การสร้าง XML Schema
·
การสร้าง WSDL
·
การสร้าง PHP Web Services
Provider
·
การสร้าง Web Services
Client
3.1.2 สร้างโฟลเดอร์ที่วางไฟล์ PHP
ไปที่โฟลเดอร์ htdocs ในตำแหน่งที่ติดตั้ง
Apache 2.2 ไว้แล้วสร้างโฟลเดอร์ย่อยชื่อว่า lab1 ดังนี้
เราจะใช้โฟลเดอร์ lab1 นี้เป็นที่วางไฟล์
PHP และไฟล์อื่นๆที่เกี่ยวข้องที่อยู่ทางฝั่งเซิร์ฟเวอร์
3.1.3 สร้างไฟล์ ProductList.xsd
เปิดโปรแกรม XML Spy เพื่อออกแบบ
XML Schema สำหรับใช้กำหนดโครงสร้าง XML ที่จะส่งไปกับ SOAP เมื่อเปิดโปรแกรม XML Spy
ขึ้นมาแล้วให้ไปที่เมนู File à New
คลิกปุ่ม OK จะปรากฏเอกสาร
XML Schema ตัวใหม่ออกมาดังนี้
เอกสาร XML Schema ที่เกิดขึ้น
ยังเป็นเอกสารเปล่าที่รอให้เราออกแบบ ให้เราเลือกเมนู File à
Save และบันทึกไว้เป็นไฟล์ชื่อว่า ProductList.xsd วางไว้ที่โฟลเดอร์ lab1 ที่ได้สร้างขึ้นจากขั้นตอนที่แล้ว
ให้ทดสอบว่าเราสามารถเบราซ์เปิดดูไฟล์ ProductList.xsd
นี้ได้จากเว็บเซิร์ฟเวอร์ โดยสตาทร์ Apache Web Server ไว้แล้วเบราซ์ไปที่ตำแหน่ง http://localhost/lab1/ProductList.xsd ควรจะสามารถเปิดไฟล์ ProductList.xsd ได้และปรากฏผลลัพธ์คล้ายดังภาพต่อไปนี้
ต่อไปนี้เราจะเริ่มออกแบบ complexType และ element ให้กับ XML Schema เพื่อใช้กำหนด XML ที่มีโครงสร้างดังนี้
<getProductListRequest
xmlns=”http://lab1.demo.info/ProductList/type”>
</getProductListRequest>
และสำหรับ XML ที่ใช้ response
ให้มีโครงสร้างดังนี้
<getProductListResponse
xmlns=”http://lab1.demo.info/ProductList/type”>
<productList>
<product>
<code>S10_1678</code>
<name> 1969 Harley
Davidson Ultimate Chopper </name>
<price>48.81</price>
</product>
<product>
<code>S10_1949</code>
<name>1952 Alpine
Renault 1300</name>
<price>98.58</price>
</product>
</productList>
</getProductListResponse>
โดยทั้ง request และ response
จะเป็น XML ที่อยู่ภายใน Namespace ชื่อว่า http://lab1.demo.info/ProductList/type
3.1.4 กำหนด targetNamespace ของไฟล์ ProductList.xsd
คลิกปุ่ม Text ด้านล่างเอกสาร
ProductList.xsd เพื่อเปลี่ยนวิวเป็นแบบตัวอักษร
เติมแอททริบิวท์ targetNamespace และ xmlns:tns เข้าไปที่บริเวณเปิดแท็ก xs:schema
ดังนี้
ซอร์สโค้ด 1
ไฟล์ ProductList.xsd (เพิ่มแอททริบิวท์ targetNamespace
และ xmlns:tns)
<?xml
version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"
targetNamespace="http://lab1.demo.info/ProductList/type" xmlns:tns="http://lab1.demo.info/ProductList/type">
<xs:element name="ENTER_NAME_OF_ROOT_ELEMENT_HERE">
<xs:annotation>
<xs:documentation>Comment describing your root
element</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>
บันทึกไฟล์ ProductList.xsd ไว้แล้วสลับวิว (View) กลับไปที่ Schema/WSDL
3.1.5 สร้าง complexType ชื่อว่า ProductType
ให้คลิกขวาที่ปุ่ม Append มุมบนซ้ายมือของเอกสาร
ProductList.xsd ที่เปิดอยู่
จะปรากฏเมนูห้อยลงมาให้เลือกคำสั่ง Complex Type เพื่อเพิ่ม complexType
ตัวใหม่
จะปรากฏแถวใหม่ออกมามีชนิดเป็น
complexType ให้ตั้งชื่อเป็น productType ดังนี้
คลิกไปที่ปุ่มเบราซ์ ด้านหน้าแถว complexType
ProductType
จะปรากฏรูปภาพ complexType อยู่หนึ่งตัวชื่อว่า ProductType อยู่กลางไดอะแกรม
และ complexType นี้ยังไม่มี element ใดๆอยู่ภายใน
คลิกขวาที่รูปภาพ complexType ProductType
ที่ปรากฏอยู่ในไดอะแกรม จะปรากฏป็อบอัพเมนู ให้เลือกคำสั่ง Add
Child à
Sequence ดังนี้
จะปรากฏหัว Sequence ต่อติดอยู่กับ
complexType ProductType ดังนี้
คลิกขวาที่หัว Sequence แล้วเลือกคำสั่ง
Add child à
Element ดังนี้
ให้ตั้งชื่อ element ชื่อว่า
code ดังนี้
รูปภาพ 16
ตั้งชื่อ element เป็น code (ส่วน tns: ไม่ต้องพิมพ์ จะปรากฏออกมาเอง เนื่องจาก tns:
เป็น prefix ที่ตั้งไว้แต่แรก)
สังเกตว่าจะมี prefix คำว่า
tns: ปรากฏออกมาด้วย นั่นแสดงว่า targetNamespace และ xmlns:tns ที่กำหนดไว้ที่ขั้นตอนที่แล้วสามารถใช้งานได้อย่างถูกต้อง
คลิกที่ element code ที่พึ่งจะสร้างขึ้น
แล้วดู Details ที่ด้านซ้ายมือ
ถ้า type เป็นว่างๆแบบนี้ถือว่า
XML Schema ตัวนี้ยังไม่สมบูรณ์
เราไม่สามารถนำไปใช้งานจริงได้ ดังนั้นให้ใส่ type เป็น xs:string
ดังนี้
ให้ใช้วิธีการเดียวกันนี้ เพิ่ม element เข้าไปอีก 2 ตัวชื่อว่า name และ
price ดังนี้
ให้กำหนด type ของ name
เป็น xs:string และ type ของ price เป็น xs:double ตามลำดับ
และ element price มี type
เป็น xs:double ดังนี้
บันทึกไฟล์ ProductList.xsd ไว้ แล้วสลับไปที่วิวแบบ Text เพื่อดูเนื้อหา XML
ที่เกิดขึ้น
3.1.6 สร้าง complexType ชื่อว่า ProductListType
ให้สลับมาที่วิว Schema/WSDL และสร้าง complexType อีกตัวชื่อว่า ProductListType
ดังนี้
ให้คลิกปุ่มเบราซ์ด้านหน้าแถว complexType
ProductListType เพื่อสลับไปที่โหมดออกแบบ แล้วเพิ่ม Sequence เข้าไปดังนี้
ให้เพิ่ม element ชื่อว่า product
ให้กับ Sequence ของ ProductListType ดังนี้
กำหนด type ของ element
ชื่อว่า product ตัวนี้ ให้มีชนิดเป็น tns:ProductType
สังเกตว่าเมื่อกำหนด type ของ
product มีชนิดเป็น tns:ProductType จะปรากฏปุ่มเครื่องหมายบวก
(+) ที่ด้านขวามือของ product ให้คลิกไปที่ปุ่มบวกนั้นจะขยายโครงสร้างของ
element product ออกมาดูดังนี้
บันทึกไฟล์ ProductList.xsd ไว้และดำเนินการที่ขั้นตอนต่อไป
3.1.7 สร้าง complexType ชื่อว่า GetProductListResponseType
ให้ใช้วิธีเดียวกับที่ผ่านมา เพื่อสร้าง complexType
ชื่อว่า GetProductListResponesType
ให้ออกแบบ complexType
GetProductListResponseType ดังนี้
เมื่อสลับไปที่วิว Text จะพบเนื้อหา
XML คล้ายดังซอร์สโค้ดต่อไปนี้
3.1.8 สร้าง element ชื่อว่า getProductListResponse
สลับมาที่วิว Schema/WSDL แล้วคลิกที่ปุ่ม
Append มุมบนซ้ายมือ แล้วเลือกคำสั่ง Element
เมื่อปรากฏ element ใหม่เพิ่มเข้ามาให้ใส่ชื่อ
element เป็น getProductListResponse ดังนี้
สังเกตว่าปัจจุบันเรายังมี element อยู่ตัวนึงที่แถวบนสุดที่มีชื่อเป็น ENTER_NAME… ซึ่ง
element ตัวนี้ XML Spy สร้างขึ้นมาให้อัตโนมัติ
แต่เราไม่จำเป็นต้องใช้ ดังนั้นให้ลบ element ตัวบนสุดตัวนี้ทิ้งไป
คลิกเลือกที่ element ตัวล่างสุดที่ชื่อว่า
getProductListResponse แล้วไปที่กรอบ Details ด้านขวามือ และกำหนด type เป็น tns:GetProductListResponseType
หลังจากนั้นเมื่อคลิกปุ่มเบราซ์ที่ด้านหน้าแถว element
getProductListResponse จะพบรูปภาพโครงสร้างของ element เป็นดังนี้
3.1.9 กำหนดค่าจำนวนนับ minOccur และ maxOccur
จากภาพไดอะแกรมโครงสร้างของ element
getProductListResponse ให้คลิกที่ตัว tns:product แล้วไปที่กรอบ Details เพื่อกำหนดให้ minOcc เป็น 0 และ maxOcc เป็น unbounded
จะทำให้ได้ภาพดังนี้
สาเหตุที่เราต้องกำหนดให้ tns:product มี maxOccur เป็น unbounded เนื่องจากเมื่อนำไปเขียน
XML จะทำให้แท็กนี้สามารถมีซ้ำๆกันได้มากกว่า 1 ครั้ง
3.1.10 นำ XML Schema ไปสร้าง XML ตัวอย่าง
หากเราต้องการรู้ว่า XML Schema ที่สร้างขึ้นนี้จะนำไปใช้กำหนดเนื้อหา XML ออกมาในรูปแบบใด
เราสามารถให้ XML Spy ช่วยสร้างตัวอย่าง XML ขึ้นมาดูได้ก่อน โดยไปที่เมนู DTD/Schema à Generate Sample XML
File …
เมื่อปรากฏหน้าต่างไดอะล็อกซ์ Generate
sample XML file ออกมา ให้เลือกทางเลือกดังนี้
สังเกตว่าการสร้าง Sample XML จะอนุญาตให้เราเลือกเฉพาะ element เท่านั้น
เราไม่สามารถเลือก complexType มาสร้างตัวอย่าง XML ได้ ในที่นี้เลือก element ชื่อว่า getProductListResponse
ที่เราได้สร้างเตรียมไว้ในขั้นตอนก่อนหน้า หลังจากเลือกทางเลือกที่เหมาะสมแล้วคลิกปุ่ม
OK จะได้ตัวอย่าง XML ปรากฏออกมาคล้ายดังภาพต่อไปนี้
ให้บันทึกตัวอย่าง XML ที่เกิดขึ้นนี้ไว้เป็นไฟล์ชื่อว่า
SampleResponse.xml วางไว้ที่โฟลเดอร์ lab1
ให้ทดลองเบราซ์ดูจากอินเตอร์เน็ตเบราเซอร์
โดยไปที่ http://localhost/lab1/SampleResponse.xml ควรจะปรากฏหน้าเว็บคล้ายดังภาพต่อไปนี้
3.1.11 ทดลองฝ่าฝืนกฏของ XML Schema
สังเกตว่าในไฟล์ SampleResponse.xml ที่บริเวร์แท็กเปิด tns:getProductListResponse จะผูกโยงเนื้อหา
XML นี้ไว้กับไฟล์ XML Schema ชื่อว่า ProductList.xsd
ซึ่งก็หมายความว่าหากเนื้อหา XML ในไฟล์นี้ไม่เป็นไปตามข้อกำหนดที่เขียนไว้ในไฟล์ ProductList.xsd จะถือว่า XML นี้ผิดกฏการตรวจสอบและจะเกิด Error
เมื่อนำไปใช้งานกับ XML Parser เราสามารถทดลองฝ่าฝืนกฏแบบง่ายๆและให้
XML Spy แจ้งเตือน โดยลองลบบรรทัด tns:code บรรทัดที่ 6 ทิ้งไปทั้งบรรทัด จนเหลือโค้ดดังนี้
จะพบว่า XML Spy แจ้งข้อความเตือนออกมาว่าไฟล์นี้ไม่ถูกต้องตามกฏที่เขียนไว้ใน
XML Schema
ให้เราคลิกปุ่ม No แล้วกลับไปแก้ไขโค้ดที่บรรทัดที่
6 ให้มีแท็ก <tns:code> กลับออกมาเหมือนเดิม
จึงจะสามารถบันทึกไฟล์ SampleResponse.xml นี้ได้
จากการทดลองนี้จะทำให้เราเข้าใจ XML
Schema มากขึ้น ว่า XML Schema มีหน้าที่ตรวจสอบว่าเนื้อหา
XML ที่สร้างขึ้นเป็นไปตามกฏเกณฑ์ที่ตั้งไว้หรือไม่
หากไม่เป็นไปตามนั้น จะได้ตรวจสอบไม่ผ่าน โดยไม่ยอมให้ข้อมูลที่ผิดพลาดเข้าสู่ระบบ
3.1.12 สร้าง complexType ชื่อว่า GetProductListRequestType
กลับไปที่ไฟล์ ProductList.xsd แล้วให้ใช้วิธีการเช่มเดียวกับที่ผ่านมาสร้าง complexType ขึ้นใหม่อีกตัวนึง ตั้งชื่อว่า GetProductListRequestType ดังนี้
complexType ที่ชื่อว่า GetProductListRequestType
นี้ไม่จำเป็นต้องมี Sequence และ element
อยู่ภายใน เนื่องจากเราไม่มีข้อมูลใดที่จำเป็นต้องส่งให้ Web
Services ในขณะ request
3.1.13 สร้าง element ชื่อว่า getProductListRequest
ให้ใช้วิธีการเช่นเดียวกับที่ผ่านมา สร้าง element
เข้าไปอีกตัวชื่อว่า getProductListRequest และกำหนด
type ของ element ตัวนี้ให้เป็นชนิด tns:GetProductListRequestType
รูปภาพ 46
สร้าง element ชื่อว่า getProductListRequest
และให้มี type เป็น tns:GetProductListRequestType
ทดลองนำ element ชื่อว่า getProductListRequest
นี้มาสร้างตัวอย่าง XML ควรจะได้ XML ดังนี้
ให้บันทึกไฟล์ตัวอย่าง XML นี้ไว้ชื่อว่า SampleRequest.xml พร้อมทั้งไปเบราซ์ดูที่หน้าเว็บที่ตำแหน่ง
http://localhost/lab1/SampleRequest.xml
เมื่อทำมาถึงขั้นตอนนี้แล้วเราจะได้ XML
Schema ที่ประกอบด้วย element 2 ตัวคือ getProductListRequest
และ getProductListResponse พร้อมทั้ง complexType
อีก 4 ตัวคือ ProductType, ProductListType,
GetProductListResponseType และ GetProductListRequestType
เราจะนำ element ทั้ง 2
ตัวนี้ไปใช้ทำเป็น input และ output ของ SOAP ให้กับไฟล์ WSDL ในการทดลองต่อไป
Casino and poker table software - DrmCD
ตอบลบThe company provides casino software for 대전광역 출장마사지 casino operators, poker room operators, poker and 동두천 출장샵 more. You'll find our latest list of the best casino Poker · 사천 출장샵 Games · 군포 출장안마 FAQ · Features 평택 출장마사지