Subversion-Projekte lars-tiefland.prado

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<com:TContent ID="body" >
2
 
3
<h1 id="134038">Layanan SOAP</h1>
4
 
5
<p id="670450" class="block-content">
6
SOAP membentuk lapisan dasar dari tumpukan layanan Web. Ia menyediakan cara yang rapi agar aplikasi PHP saling berkomunikasi atau dengan aplikasi yang ditulis dalam bahasa lain. PRADO menyediakan <tt>TSoapService</tt> yang membuat pengembagan aplikasi server SOAP menjadi tugas yang sangat mudah.
7
</p>
8
 
9
<p id="670451" class="block-content">
10
Untuk menggunakan <tt>TSoapService</tt>, konfigurasi itu dalam spesifikasi aplikasi seperti berikut:
11
</p>
12
<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_670133">
13
<services>
14
  <service id="soap" class="System.Web.Services.TSoapService">
15
    <soap id="stockquote" provider="path.to.StockQuote" />
16
    <!--
17
    <soap...other soap service... />
18
    -->
19
  </service>
20
</services>
21
</com:TTextHighlighter>
22
<p id="670452" class="block-content">
23
Contoh menetapkan penyedia layanan SOAP bernama <tt>stockquote</tt> yang mengimplementasikan metode SOAP <tt>getPrice</tt> dalam kelas penyedia <tt>StockQuote</tt>,
24
</p>
25
<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_670134">
26
class StockQuote
27
{
28
	/**
29
	 * @param string $symbol the symbol of the stock
30
	 * @return float the stock price
31
	 * @soapmethod
32
	 */
33
	public function getPrice($symbol)
34
	{
35
		....return stock price for $symbol
36
	}
37
}
38
</com:TTextHighlighter>
39
 
40
<div class="note"><b class="tip">Catatan:</b>
41
<tt>TSoapService</tt> didasarkan pada <a href="http://www.php.net/manual/en/ref.soap.php">ekstensi SOAP PHP</a> dan memerlukan ekstensi terinstalasi.
42
</div>
43
 
44
<p id="670453" class="block-content">
45
Dengan kode sederhana di atas, kita sudah menyelesaikan layanan SOAP sederhana yang membolehkan aplikasi lain untuk meng-query harga dari stok tertentu. Sebagai contoh, umumnya klien SOAP bisa ditulis seperti berikut guna mendapatkan harga stok atas IBM,
46
</p>
47
<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_670135">
48
$client=new SoapClient('http://path/to/index.php?soap=stockquote.wsdl');
49
echo $client->getPrice('IBM');
50
</com:TTextHighlighter>
51
 
52
<p id="670454" class="block-content">
53
Perhatikan URL yang digunakan untuk membentuk <tt>SoapClient</tt> (kelas disediakan oleh ekstensi SOAP PHP). Ini adalah URL untuk <a href="http://en.wikipedia.org/wiki/WSDL">WSDL</a> yang menjelaskan protokol komunikasi untuk layanan SOAP yang baru kita implementasikan. WSDL sering kali terlalu rumit untuk ditulis secara manual. Kebetulan, <tt>TSoapService</tt> bisa membuat ini bagi kita menggunakan generator WSDL. Secara umum, URL untuk membuat WSDL secara otomatis dalam PRADO mempunyai format berikut:
54
</p>
55
<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_670136">
56
http://path/to/index.php?SoapServiceID=SoapProviderID.wsdl
57
</com:TTextHighlighter>
58
 
59
<p id="670455" class="block-content">
60
Agar generator WSDL membuat WSDL untuk layanan SOAP, kelas penyedia perlu untuk mengikuti sintaks tertentu. Dalam keadaan tertentu, untuk metode yang akan diperlihatkan sebagai metode SOAP, kata kunci <tt>@soapmethod</tt> harus muncul dalam komentar phpdoc terhadap metode dengan baris berikut yang menetapkan parameter metode dan nilai hasil:
61
</p>
62
<ul id="u1" class="block-content">
63
<li>parameter: <tt>@param parameter-type $parameter-name description</tt></li>
64
<li>return value: <tt>@return value-type description</tt></li>
65
</ul>
66
<p id="670456" class="block-content">
67
Parameter yang benar dan tipe hasil termasuk: <tt>string</tt>, <tt>int</tt>, <tt>boolean</tt>, <tt>float</tt>, <tt>array</tt>, <tt>mixed</tt>, dll. Anda dapat juga menetapkan nama kelas sebagai tipe, yang menterjemahkan ke dalam tipe SOAP kompleks. Sebagai contoh, untuk tipe kompleks <tt>Contact</tt>
68
</p>
69
 
70
<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_670137">
71
/**
72
 * Memperluas TComponent untuk menyediakan metode pengambil/penentu properti
73
 */
74
class Contact {
75
    /**
76
     * @var string $name
77
     * @soapproperty
78
     */
79
    public $name;
80
 
81
    /**
82
     * @var Address $address
83
     * @soapproperty
84
     */
85
    private $_address;
86
 
87
    public function setAddress($value) {
88
        $this->_address=$value;
89
    }
90
 
91
    public function getAddress() {
92
        if($this->_address===null)
93
            $this->_address=new Address;
94
        return $this->_address;
95
    }
96
}
97
 
98
class Address{
99
    /**
100
     * @var string $city
101
     * @soapproperty
102
     */
103
    public $city;
104
}
105
 
106
class ContactManager {
107
    /**
108
     * @return Contact[] an array of contacts
109
     * @soapmethod
110
     */
111
    function getAllContacts() {
112
        return array(new Contact);
113
    }
114
 
115
    /**
116
     * @return Contact one contact
117
     * @soapmethod
118
     */
119
    function getContact($name) {
120
        return new Contact;
121
    }
122
}
123
</com:TTextHighlighter>
124
<p id="670457" class="block-content">Untuk obyek soap kompleks, properti obyek ditetapkan dengan kata kunci <tt>@soapproperty</tt> dalam phpdocs. Selanjutnya, nama tipe properti harus ditetapkan sebagai <tt>@var type $name</tt> di mana <tt>type</tt> adalah tipe apapun yang benar seperti telah disebutkan sebelumnya dan <tt>$name</tt> akan mendefinisikan properti <tt>name</tt> (catatan bahwa jika kelas Anda adalah TComponent, Anda bisa menyediakan properti pengambil/penentu).
125
</p>
126
<p id="670458" class="block-content">
127
Sebuah array dari obyek yang kompleks juga bisa dihasilkan dengan menambahkan pasangan yang dilindungi kurung kotak setelah nama tipe. Sebagai contoh, untuk menghasilkan array dari tipe <tt>Contact</tt>, kita mendefinisikan <tt>@return Contact[] ...</tt>.
128
</p>
129
 
130
<div class="tip"><b class="note">Tip:</b>
131
Piranti sangat berguna untuk menguji layanan web Anda adalah piranti bebas
132
<a href="http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=65a1d4ea-0f7a-41bd-8494-e916ebc4159c">WebServiceStudio 2.0</a>. Ia bisa memanggil webmethods secara interaktif. Pengguna dapat menyediakan sebuah titik akhir WSDL. Pada saat mengklik tombol Get piranti mengambil WSDL, membuat proxy .NET dari WSDL dan menampilkan daftar metode yang tersedia. Pengguna bisa memilih setiap metode dan menyediakan parameter input yang diplerukan.
133
Piranti membutuhkan MS .NET runtime terinstalasi.
134
 
135
<p id="690008" class="block-content">Piranti semacam itu tersedia untuk Mac OS X Tiger dari
136
<a href="http://www.ditchnet.org/soapclient/">http://www.ditchnet.org/soapclient/</a>
137
</p>
138
</div>
139
 
140
<p id="670459" class="block-content">
141
<tt>TSoapService</tt> bisa dikonfigurasi dan dikustomisasi dalam beberapa cara. Dalam contoh di atas, elemen <tt>&lt;soap&gt;</tt> sebenarnya menetapkan sebuah layanan SOAP menggunakan implementasi standar <tt>TSoapServer</tt>. Atribut dalam <tt>&lt;soap&gt;</tt> dikirimkan ke <tt>TSoapServer</tt> sebagai nilai properti awalnya. Sebagai contoh, atribut <tt>provider</tt> menginisialisasi properti <tt>Provider</tt> dari <tt>TSoapServer</tt>. Dengan menyetel <tt>SessionPersistent</tt> menjadi true dalam elemen <tt>&lt;soap&gt;</tt>, turunan penyedia akan sama di dalam sesi pengguna. Anda bisa mengembangkan kelas server SOAP sendiri dan menggunakannya dengan menetapkan atribut <tt>class</tt> dari <tt>&lt;soap&gt;</tt>.
142
</p>
143
 
144
<p id="670460" class="block-content">Standarnya, server SOAP PHP akan membuat obyek dari tipe <tt>StdClass</tt> ketika obyek diterima dari klien. Server soap bisa dikonfigurasi untuk secara otomatis membuat obyek dari obyek tipe tertentu diterima sebagai parameter metode. Sebagai contoh, jika kita mempunyai sebuah metode Soap yang menerima obyek <tt>Contact</tt> sebagai parameter.
145
<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_670138">
146
/**
147
 * @param Contact $contact
148
 * @return boolean true if saved, false otherwise
149
 * @soapmethod
150
 */
151
 function save(Contact $contact)
152
 {
153
	return true
154
 }
155
</com:TTextHighlighter>
156
Untuk melakukan ini, kita perlu menyetel properti <tt>ClassMaps</tt> dari
157
<tt>TSoapServer</tt> dalam tag <tt>&lt;soap&gt;</tt> sebagai nama kelas string dipisahkan koma yang kita inginkan secara otomatis dikonversi.
158
<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_670139">
159
<soap id="contact-manager" provider="path.to.ContactManager"
160
	ClassMaps="Contact, Address"/>
161
</com:TTextHighlighter>
162
</p>
163
 
164
<div class="last-modified">$Id: SoapService.page 1902 2007-05-07 04:17:37Z wei $</div></com:TContent>