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

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

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

batman1292
PHP Jr. Member
PHP Jr. Member
โพสต์: 24
ลงทะเบียนเมื่อ: 10/01/2012 1:09 pm

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

โพสต์ที่ยังไม่ได้อ่าน โดย batman1292 »

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

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

โค้ด: เลือกทั้งหมด

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

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

โค้ด: เลือกทั้งหมด

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

โค้ด: เลือกทั้งหมด

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

โค้ด: เลือกทั้งหมด

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

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

โค้ด: เลือกทั้งหมด

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

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

โค้ด: เลือกทั้งหมด

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

โค้ด: เลือกทั้งหมด

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

ในส่วนของการใช้ WSDL เดี๋ยวค่อยมาต่อนะครับ :-D
batman1292
PHP Jr. Member
PHP Jr. Member
โพสต์: 24
ลงทะเบียนเมื่อ: 10/01/2012 1:09 pm

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

โพสต์ที่ยังไม่ได้อ่าน โดย batman1292 »

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

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

โค้ด: เลือกทั้งหมด

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เลย

โค้ด: เลือกทั้งหมด

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

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

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

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

โค้ด: เลือกทั้งหมด

<?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
โพสต์: 95
ลงทะเบียนเมื่อ: 10/04/2012 9:09 am

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

โพสต์ที่ยังไม่ได้อ่าน โดย tohkai_php »

ผมว่าไม่ต้องใช้ทั้งสองแหละ เขียน write xml ง่ายกว่าทำัฟังชั้นดีๆ ใช้ง่ายนิดเดียว
เวลาเรียกใช้สะดวกกว่าเยอะ
ไม่ต้องมาเรียก อะไรมากมายให้ปวดตับ เหอะๆ
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41336
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

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

โพสต์ที่ยังไม่ได้อ่าน โดย 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
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41336
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

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

โพสต์ที่ยังไม่ได้อ่าน โดย 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
ตอบกลับโพส

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 65