ใช้ php สร้าง WebServices ด้วย PHPSoap

หมวดสำหรับแบ่งบันความ รู้ต่างๆ จะมีหมวดย่อยๆ ในหมวดนี้ เช่น php, SQL, XML, CSS

Moderators: mindphp, ผู้ดูแลกระดาน

batman1292
PHP Jr. Member
PHP Jr. Member
Posts: 24
Joined: 10/01/2012 1:09 pm

ใช้ php สร้าง WebServices ด้วย PHPSoap

Post by batman1292 »

การสร้างแบบนี้จะมีอยู่ 2 ประเภทคือ
1)ไม่ใช้ WSDL
2)ใช้ WSDL

1)ไม่ใช้ WSDL
การสร้างโดยวิธีแรกเราก็จะต้องแบ่งไฟล์ออกเป็น 2 ส่วนคือ ส่วนของ Server และ ส่วนของ Client
ในส่วนของ Server นี้จะประกอบไปตัวตัวอย่างโค๊ดด้านล่างนี้

Code: Select all

function TEST($input){
    return $input+10;
}

$server = new SoapServer(null, 
        array( 'uri' => '***'));
$server->addFunction('TEST');
$server->handle();
โดยที่ TEST จะเป็นฟังก์ชันที่เราได้สร้างขึ้นมา

Code: Select all

$server = new SoapServer(null, array( 'uri' => '***'))
ส่วนนี้จะเป็นส่วนของการสร้าง Server โดยที่ uri จะเป็นอะไรก็ได้ตามที่เราต้องการ

Code: Select all

$server->addFunction('TEST')
ต่อมาเป็นการลงทะเบียนให้กับฟังก์ชันที่เราสร้างขึ้นมา

Code: Select all

$server->handle()
ส่วนสุดท้ายเป็นการใช้คำสั่งเพื่อประมวลผลและสร้างผลลัพธ์

ต่อมาจะเป็นส่วนของ Client จะประกอบไปด้วยโค๊ดดังนี้

Code: Select all

$client = new SoapClient(null, array(
      'location' => "http://localhost/yyy.php",
      'uri'      => '***'));

echo $client->__soapCall('TEST', array('21'));
โดยที่ส่วนแรกจะเป็นการสร้าง Client ตามโค๊ดด้านล่างนี้

Code: Select all

$client = new SoapClient(null, array(
      'location' => "http://localhost/yyy.php",
      'uri'      => '***'))
โดยที่อาร์เรย์ที่ชื่อ location ให้กำหนดเป็น URL ของไฟล์ในส่วน Server และ uri ให้กำหนดเหมือน uri ในส่วนของ Server

Code: Select all

echo $client->__soapCall('TEST', array('21'))
ส่วนนี้จะเป็นส่วนของการเรียกใช้และแสดงผลฟังก์ชันที่ลงทะเบียนไว้ในส่วนของ Server

ในส่วนของการใช้ WSDL เดี๋ยวค่อยมาต่อนะครับ :-D

batman1292
PHP Jr. Member
PHP Jr. Member
Posts: 24
Joined: 10/01/2012 1:09 pm

Re: ใช้ php สร้าง WebServices ด้วย PHPSoap

Post by batman1292 »

ต่อจากหัวข้อด้านบนนะครับ
จะเป็นการสร้าง WebServices ในแบบใช้ WSDL จะแบ่งไฟล์ออกเป็น 3 ส่วนคือ
1)ส่วนของ Server
2)ส่วนของ Client
3)ส่วนของ WSDL

มาดูโค๊ดในส่วนต่างๆกันเลยดีกว่าครับ

Code: Select all

function hello($someone) {
    return "Hello " . $someone . "!";
}

$server = new SoapServer("http://localhost/aaa.wsdl");
$server->addFunction("hello");
$server->handle();
จากโค๊ดด้านบนจะอยู่ในส่วนของ Server
โดยที่ส่วนของฟังก์ชันจะเหมือนกับฟังก์ชันทั่วๆไปที่เราต้องการลงทะเบียน

จากนั้นจะเป็นส่วนของการสร้าง Server โดยที่จะเห็นว่าใน Constructor จะมี parameter แค่ตัวเดียวคือไฟล์ในส่วนของ WSDL โดยที่ parameter ต่างๆของ Constructor สามารถศึกษาเพิ่มจากลิงค์นี้http://www.php.net/manual/en/soapserver.soapserver.php

ต่อมาก็จะทำเหมือนกับการใช้WSDLเลย

Code: Select all

$client = new SoapClient("http://localhost/aaa.wsdl",
                array('trace' => 1));

echo ($client->hello("***"));
จากโค๊ดด้านบนจะเป็นส่วนของ Client โดยที่ Constructor คล้ายๆเดิมเปลี่ยนแค่ parameter ตัวแรกให้ตรงกับไฟล์ที่กำหนดในส่วนของ Server

จากนั้นเป็นการเรียกใช้ฟังก์ชัน

ต่อมาจะเป็นส่วนสุดท้ายคือ ส่วนของ WSDL โดยที่หากไม่เขียนในส่วนนี้จะไม่สามารถทำการทดสอบได้ซึ่งโค๊ดจะมีดังนี้

Code: Select all

<?xml version="1.0" encoding ='UTF-8'?>
<definitions name="MyDefinition" 
             targetNamespace="urn:myTargetNamespace"
             xmlns:tns="urn:myTns"   
             xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
             xmlns="http://schemas.xmlsoap.org/wsdl/">
    <message name="myRequest">
        <part name="reqParam" type="xsd:string"/>
    </message>
    <message name="myResponse">
        <part name="resParam" type="xsd:string"/>
    </message>
    <portType name="MyPortType">
        <operation name="hello">
            <input message="tns:myRequest"/>
            <output message="tns:myResponse"/>
        </operation>
    </portType>
    <binding name="MyBinding" type="tns:MyPortType">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="hello">
            <soap:operation soapAction=""/>
            <input>
                <soap:body use="encoded" namespace="urn:myInputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </input>
            <output>
                <soap:body use="encoded" namespace="urn:myOutputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </output>
        </operation>
    </binding>
    <service name="MyService">
        <documentation>Returns a greeting string.
        </documentation>
        <port name="MyPort" binding="tns:MyBinding">
            <soap:address location="http://localhost/ไฟล์ในส่วนของServer.php"/>
        </port>
    </service>
</definitions>
โดยที่ลายละเอียดต่างๆของโค๊ดสามารถดูได้จากลิงค์นี้http://www.w3.org/TR/wsdl

tohkai_php
PHP Sr. Member
PHP Sr. Member
Posts: 95
Joined: 10/04/2012 9:09 am

Re: ใช้ php สร้าง WebServices ด้วย PHPSoap

Post by tohkai_php »

ผมว่าไม่ต้องใช้ทั้งสองแหละ เขียน write xml ง่ายกว่าทำัฟังชั้นดีๆ ใช้ง่ายนิดเดียว
เวลาเรียกใช้สะดวกกว่าเยอะ
ไม่ต้องมาเรียก อะไรมากมายให้ปวดตับ เหอะๆ

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 24213
Joined: 22/09/2008 6:18 pm
Contact:

Re: ใช้ php สร้าง WebServices ด้วย PHPSoap

Post by mindphp »

ถ้าใช้ PHPSoap ต้องสร้าง WSDL เอง ถ้าจะใช้ PHPSoap แบบ ใช้ WSDL ก็ต้องทำ แบบ tohkai_php ว่า หรือ จะเอาสะดวกก็มี class ที่ไว้ gen พวกนี้ให้ แต่โดยส่วนตัวคิดว่ามันไม่สะดวก เวลาสร้าง
Web Service Server หลาย ตัว ถ้าเป็น Framework อย่าง Nusoap, Zend Soap, หรือ ตัว Pear ใช้ ใน Framework ดีกว่าครับ มาตรฐาน พอใช้คร่อง จะรู้ว่าทุ่นเวลาได้เยอะ
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 24213
Joined: 22/09/2008 6:18 pm
Contact:

Re: ใช้ php สร้าง WebServices ด้วย PHPSoap

Post by mindphp »

ข้อ ดีของ phpSoap
คือ
support for complex types (arrays, objects)
support for SOAP headers
dynamic support for both SOAP 1.1 and SOAP 1.2
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

malangtub

Re: ใช้ php สร้าง WebServices ด้วย PHPSoap

Post by malangtub »

ขอบคุณค่ะ

Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Share Knowledge”

Who is online

Users browsing this forum: No registered users and 7 guests