Dokumen ini menjelaskan cara mendapatkan dan menginstal NuSOAP, dan kemudian memberikan beberapa contoh untuk mengilustrasikan fungsi NuSOAP. Ini bukanlah pengenalan menyeluruh tentang NuSOAP, namun semoga beberapa pengembang PHP dapat memperoleh pengenalan yang baik.
NuSOAP adalah sekumpulan kelas PHP yang memungkinkan pengembang membuat dan menggunakan layanan web SOAP. Tidak memerlukan ekstensi PHP apa pun untuk diinstal. Ini dikembangkan pada tanggal 3 Desember 2004, dan versi saat ini adalah NuSOAP (0.6.7). Mendukung spesifikasi SOAP 1.1, dapat memproduksi dan menggunakan WSDL 1.1, dan juga mendukung layanan rpc/encoded dan document/literal. Namun, penting untuk dicatat bahwa NuSOAP tidak menyediakan implementasi lengkap seperti .NET dan Apache Axis.
Halo, Dunia
Saya akan mulai dengan contoh "Halo, Dunia" dan menulis kode klien dan server NuSOAP dasar.
Mari kita mulai dengan sisi server terlebih dahulu, karena tanpa sisi server, tidak ada gunanya memiliki sisi klien. Kita akan menulis metode SOAP bernama Hello yang mengambil satu parameter dan mengembalikan sebuah string, dan semoga komentar dalam kode akan memberikan instruksi yang berguna.
<?php
// Tarik kode NuSOAP
require_once('nusoap.php');
// Buat instance server
$server = sabun_server baru;
// Daftarkan metode yang akan diekspos
$server->daftar('halo');
// Mendefinisikan metode sebagai fungsi PHP
fungsi halo($nama) {
kembali 'Halo, ' .
}
// Gunakan permintaan untuk (mencoba) memanggil layanan
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ?$HTTP_RAW_POST_DATA : '';
$server->layanan($HTTP_RAW_POST_DATA);
?>
Berikut ini adalah kode klien. Ada beberapa hal penting yang perlu diperhatikan: Pertama , saat membuat instance sabunclient, Anda perlu menentukan URL layanan sebagai parameter. localhost/phphack dari. Tentu saja, layanan yang ingin Anda gunakan ditempatkan di URL yang berbeda; kedua, saat memanggil layanan, parameter pertama adalah nama layanan, yang harus cocok dengan nama metode yang valid (beberapa server peka huruf besar-kecil). Pada contoh ini harus sesuai dengan metode yang sudah terdaftar di helloworld.php. Terakhir, parameter kedua adalah array yang akan diteruskan ke metode layanan SOAP sebagai parameter. Karena metode hello di helloworld.php hanya memiliki satu parameter, maka array hanya memiliki satu elemen.
<?php
// Tarik kode NuSOAP
require_once('nusoap.php');
// Buat instance klien
$klien = klien sabun baru('http://localhost/phphack/helloworld.php');
// Panggil metode SOAP
$hasil = $klien->panggilan('halo', array('nama' => 'Scott'));
// Tampilkan hasilnya
print_r($hasil);
?>
Men-debug
Saat memprogram, Anda perlu melakukan debug setiap kali terjadi kesalahan. NuSOAP menyediakan seperangkat alat untuk membantu Anda melakukan hal ini. Informasi yang perlu Anda periksa saat men-debug NuSOAP adalah informasi permintaan yang dikirim dan informasi terkait dikembalikan. Kelas klien NuSOAP memungkinkan Anda melihat informasi ini melalui dua anggotanya. Misalnya, berikut adalah versi modifikasi dari helloworldclient.php yang menampilkan permintaan dan respons. Di bagian selanjutnya saya akan meninjau informasi permintaan dan respons yang ditampilkan dalam kode klien.
<?php
// Tarik kode NuSOAP
require_once('nusoap.php');
// Buat instance klien
$klien = klien sabun baru('http://localhost/phphack/helloworld.php');
// Panggil metode SOAP
$hasil = $klien->panggilan('halo', array('nama' => 'Scott'));
// Tampilkan hasilnya
print_r($hasil);
// Menampilkan permintaan dan respons
echo '<h2>Permintaan</h2>';
echo '<pre>' .htmlkarakter khusus($klien->permintaan, ENT_QUOTES) '</pre>';
echo '<h2>Respon</h2>';
echo '<pre>' .htmlspecialchars($klien->respons, ENT_QUOTES) '</pre>';
?>
NuSOAP juga menyediakan metode untuk melihat informasi debug melalui log menggunakan kelasnya. Menambahkan kode berikut akan menampilkan informasi debug yang panjang. Sayangnya uraian keluarannya harus diserahkan kepada pembaca.
// Menampilkan pesan debug
echo '<h2>Debug</h2>';
echo '<pre>' .htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
Server dapat memberikan informasi debug serupa. Menariknya, informasi debug ini ada dalam xml di akhir format SOAP ditampilkan sehingga dapat dilihat di klien. Proses debug sisi server terlihat seperti ini:
<?php
// Tarik kode NuSOAP
require_once('nusoap.php');
// Aktifkan debugging *sebelum* membuat instance server
$debug = 1;
// Buat instance server
$server = sabun_server baru;
// Daftarkan metode yang akan diekspos
$server->daftar('halo');
// Mendefinisikan metode sebagai fungsi PHP
fungsi halo($nama) {
kembali 'Halo, ' .
}
// Gunakan permintaan untuk (mencoba) memanggil layanan
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ?$HTTP_RAW_POST_DATA : '';
$server->layanan($HTTP_RAW_POST_DATA);
?>
Metode debugging yang ketiga sebenarnya bukan debugging, ini adalah praktik pemrograman yang baik. Contoh di atas tidak melakukan pengecekan kesalahan saat memanggil SOAP. Klien yang lebih kuat akan terlihat seperti ini:
<?php
// Tarik kode NuSOAP
require_once('nusoap.php');
// Buat instance klien
$klien = klien sabun baru('http://localhost/phphack/helloworld.php');
// Periksa kesalahan
$err = $klien->getError();
jika ($err) {
// Tampilkan kesalahannya
echo '<p><b>Kesalahan konstruktor: ' $err .
// Pada titik ini, Anda tahu bahwa panggilan berikutnya akan gagal
}
// Panggil metode SOAP
$hasil = $klien->panggilan('halo', array('nama' => 'Scott'));
// Periksa kesalahannya
if ($klien->kesalahan) {
echo '<p><b>Kesalahan: ';
print_r($hasil);
gema '</b></p>';
} kalau tidak {
// Periksa kesalahan
$err = $klien->getError();
jika ($err) {
// Tampilkan kesalahannya
echo '<p><b>Kesalahan: ' .$err '</b></p>';
} kalau tidak {
// Tampilkan hasilnya
print_r($hasil);
}
}
?>
Untuk menguji kode, Anda perlu menyebabkan terjadinya kesalahan, misalnya, mengubah nama metode yang dipanggil halo menjadi selamat tinggal.
Permintaan dan Tanggapan
Saya telah menunjukkan pada contoh di atas betapa mudahnya menampilkan informasi permintaan dan respons SOAP, berikut adalah informasi permintaan untuk hello2client.php:
POST /phphack/helloworld2.php HTTP/1.0
Tuan rumah: host lokal
Agen-Pengguna: NuSOAP/0.6.8 (1.81)
Tipe Konten: teks/xml; charset=ISO-8859-1
Aksi SABUN: ""
Panjang Konten: 538
<?xml version="1.0" coding="ISO-8859-1"?>
<SOAP-ENV: Amplop
SABUN-ENV:encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/ "
xmlns:SOAP-ENV=" http://schemas.xmlsoap.org/soap/envelope/ "
xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
xmlns:SOAP-ENC=" http://schemas.xmlsoap.org/soap/encoding/ "
xmlns:si=" http://soapinterop.org/xsd ">
<SOAP-ENV: Badan>
<ns1:halo xmlns:ns1=" http://testuri.org ">
<nama xsi:type="xsd:string">Scott</nama>
</ns1:halo>
</SOAP-ENV:Tubuh>
</SOAP-ENV: Amplop>
Di header HTTP, Anda akan melihat bahwa SOAPAction adalah string kosong, yang merupakan nilai defaultnya. Metode layanan Anda dapat mengatur nilai SOAPAction, dan kode klien Anda dapat memanggil metode yang menentukan SOAPAction sebagai parameter.
Dalam muatan XML, Anda dapat melihat bahwa NuSOAP menggunakan pengkodean ISO-8859-1 yang terkenal sebagai Latin-1. Untuk menentukan pengkodean yang berbeda, Anda dapat mengatur atribut sabun_defencoding pada contoh klien sabun. Tentu saja merupakan tanggung jawab pemrogram untuk mengkodekan data parameter menggunakan pengkodean yang ditentukan. Untungnya, PHP menyediakan banyak fungsi untuk menyandikan dan mendekode data pengkodean yang paling umum di SOAP, seperti UTF-8.
Hal lain yang perlu diperhatikan adalah elemen menentukan metode yang akan dipanggil. Elemen bernama hello ditempatkan di bawah nama domain http://tempuri.org . Menentukan nama domain sebenarnya adalah praktik terbaik dan juga sangat umum untuk banyak layanan .Itu perlu. Dokumen masa depan ditampilkan di sini:
Layanan SOAP merespons seperti ini:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Tanggal: Rabu, 03 Nov 2004 21:32:34 GMT
X-Didukung-Oleh: ASP.NET
X-Didukung-Oleh: PHP/4.3.4
Server: Server NuSOAP v0.6.8
Server X-SOAP: NuSOAP/0.6.8 (1.81)
Tipe Konten: teks/xml; charset=ISO-8859-1
Panjang Konten: 556
<?xml version="1.0" coding="ISO-8859-1"?>
<SOAP-ENV: Amplop
SABUN-ENV:encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/ "
xmlns:SOAP-ENV=" http://schemas.xmlsoap.org/soap/envelope/ "
xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
xmlns:SOAP-ENC=" http://schemas.xmlsoap.org/soap/encoding/ "
xmlns:si=" http://soapinterop.org/xsd ">
<SOAP-ENV: Badan>
<ns1:helloResponse xmlns:ns1=" http://tempuri.org ">
<return xsi:type="xsd:string">Halo, Scott</return>
</haloRespon>
</SOAP-ENV:Tubuh>
</SOAP-ENV: Amplop>