يصف هذا المستند كيفية الحصول على NuSOAP وتثبيته، ثم يقدم بعض الأمثلة لتوضيح وظائف NuSOAP. هذه ليست مقدمة شاملة لـ NuSOAP، ولكن نأمل أن يكون لدى بعض مطوري PHP مقدمة جيدة.
NuSOAP عبارة عن مجموعة من فئات PHP التي تسمح للمطورين بإنشاء خدمات ويب SOAP واستخدامها. لا يتطلب تثبيت أي ملحقات PHP. تم تطويره في 3 ديسمبر 2004، والإصدار الحالي هو NuSOAP (0.6.7). من خلال دعم مواصفات SOAP 1.1، يمكنه إنتاج واستخدام WSDL 1.1، كما يدعم أيضًا خدمات rpc/المشفرة والمستندات/الحرفية. ومع ذلك، من المهم ملاحظة أن NuSOAP لا يوفر تطبيقًا كاملاً مثل .NET وApache Axis.
مرحبا بالعالم
سأبدأ بمثال "Hello, World" وأكتب كود خادم وخادم NuSOAP الأساسي.
لنبدأ بجانب الخادم أولاً، لأنه بدون جانب الخادم، لا معنى لوجود جانب العميل. سنقوم بكتابة طريقة SOAP باسم Hello والتي تأخذ معلمة واحدة وتقوم بإرجاع سلسلة، ونأمل أن توفر التعليقات الموجودة في الكود تعليمات مفيدة.
<?php
// اسحب رمز NuSOAP
require_once('nusoap.php');
// قم بإنشاء مثيل الخادم
$server = new Soap_server;
// سجل طريقة الكشف
$server->register('hello');
// حدد الطريقة كوظيفة PHP
وظيفة مرحبا(اسم $) {
إرجاع "مرحبًا،" $name؛
}
// استخدم الطلب (لمحاولة) استدعاء الخدمة
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>
ما يلي هو رمز العميل. هناك بعض الأشياء المهمة التي يجب ملاحظتها: أولاً، عند إنشاء مثيل Soapclient، تحتاج إلى تحديد عنوان URL للخدمة كمعلمة. في هذا المثال، يتم الوصول إلى helloworld.php من http://. المضيف المحلي/phphack ل. بالطبع، يتم وضع الخدمات التي تريد استخدامها في عناوين URL مختلفة؛ ثانيًا، عند استدعاء الخدمة، تكون المعلمة الأولى هي اسم الخدمة، والذي يجب أن يتطابق مع اسم طريقة صالح (بعض الخوادم حساسة لحالة الأحرف). في هذا المثال، يجب أن يتطابق مع الطريقة المسجلة بالفعل في helloworld.php. وأخيرًا، المعلمة الثانية هي مصفوفة سيتم تمريرها إلى أسلوب خدمة SOAP كمعلمة. نظرًا لأن التابع hello في helloworld.php يحتوي على معلمة واحدة فقط، فإن المصفوفة تحتوي على عنصر واحد فقط.
<?php
// اسحب رمز NuSOAP
require_once('nusoap.php');
// قم بإنشاء مثيل العميل
$client = new Soapclient('http://localhost/phphack/helloworld.php');
// اتصل بطريقة SOAP
$result = $client->call('hello', array('name' => 'Scott'));
// عرض النتيجة
print_r(نتيجة $);
?>
تصحيح الأخطاء
عند البرمجة، تحتاج إلى تصحيح الأخطاء كلما حدث خطأ ما. يوفر NuSOAP مجموعة من الأدوات لمساعدتك على القيام بذلك. المعلومات التي تحتاج إلى التحقق منها عند تصحيح أخطاء NuSOAP هي معلومات الطلب المرسلة والمعلومات المقابلة التي تم إرجاعها. تتيح لك فئة عميل NuSOAP عرض هذه المعلومات من خلال أعضائها. على سبيل المثال، هنا نسخة معدلة من helloworldclient.php تظهر الطلب والاستجابة. في القسم التالي، سأقوم بمراجعة معلومات الطلب والاستجابة المعروضة في رمز العميل.
<?php
// اسحب رمز NuSOAP
require_once('nusoap.php');
// قم بإنشاء مثيل العميل
$client = new Soapclient('http://localhost/phphack/helloworld.php');
// اتصل بطريقة SOAP
$result = $client->call('hello', array('name' => 'Scott'));
// عرض النتيجة
print_r(نتيجة $);
// عرض الطلب والاستجابة
صدى '<h2>طلب</h2>';
صدى '<pre>' htmlspecialchars($client->request, ENT_QUOTES) '</pre>' .
صدى '<h2>الاستجابة</h2>';
صدى '<pre>' htmlspecialchars($client->response, ENT_QUOTES) '</pre>' .
?>
يوفر NuSOAP أيضًا طريقة لعرض معلومات تصحيح الأخطاء من خلال السجلات باستخدام فئاته. ستؤدي إضافة التعليمة البرمجية التالية إلى عرض معلومات تصحيح مطولة. ولسوء الحظ يجب أن يترك وصف الإخراج للقارئ.
// عرض رسائل التصحيح
صدى '<h2>تصحيح</h2>';
'
<pre>'
يتم عرضه بحيث يمكن مشاهدته في العميل. يبدو تصحيح الأخطاء من جانب الخادم كما يلي:
<?php
// اسحب رمز NuSOAP
require_once('nusoap.php');
// تمكين تصحيح الأخطاء *قبل* إنشاء مثيل الخادم
تصحيح $ = 1؛
// قم بإنشاء مثيل الخادم
$server = new Soap_server;
// سجل طريقة الكشف
$server->register('hello');
// حدد الطريقة كوظيفة PHP
وظيفة مرحبا(اسم $) {
إرجاع "مرحبًا،" $name؛
}
// استخدم الطلب (لمحاولة) استدعاء الخدمة
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>
الطريقة الثالثة لتصحيح الأخطاء ليست في الواقع تصحيحًا للأخطاء، بل هي ممارسة برمجة جيدة. المثال أعلاه لا يقوم بالتحقق من الأخطاء عند استدعاء SOAP. سيبدو العميل الأكثر قوة على النحو التالي:
<?php
// اسحب رمز NuSOAP
require_once('nusoap.php');
// قم بإنشاء مثيل العميل
$client = new Soapclient('http://localhost/phphack/helloworld.php');
// التحقق من وجود خطأ
$err = $client->getError();
إذا ($يخطئ) {
// عرض الخطأ
echo '<p><b>خطأ في المنشئ: ' . $err '</b></p>';
// عند هذه النقطة، تعلم أن المكالمة التالية ستفشل
}
// اتصل بطريقة SOAP
$result = $client->call('hello', array('name' => 'Scott'));
// التحقق من وجود خطأ
إذا ($العميل->خطأ) {
صدى '<p><b>خطأ: ';
print_r(نتيجة $);
صدى '</b></p>';
} آخر {
// التحقق من وجود أخطاء
$err = $client->getError();
إذا ($يخطئ) {
// عرض الخطأ
صدى '<p><b>خطأ: ' . $err '</b></p>';
} آخر {
// عرض النتيجة
print_r(نتيجة $);
}
}
?>
من أجل اختبار الكود، يجب عليك التسبب في حدوث خطأ، على سبيل المثال، تغيير اسم الطريقة المستدعى من hello إلى وداعًا.
الطلب والرد
لقد أوضحت في المثال أعلاه مدى سهولة عرض طلب SOAP ومعلومات الاستجابة، إليك معلومات الطلب الخاصة بـ hello2client.php:
POST /phphack/helloworld2.php HTTP/1.0
المضيف: المضيف المحلي
وكيل المستخدم: NuSOAP/0.6.8 (1.81)
نوع المحتوى: نص/xml؛
عمل الصابون: ""
طول المحتوى: 538
<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope
SOAP-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:الجسم>
<ns1:hello xmlns:ns1=" http://testuri.org ">
<name xsi:type="xsd:string">سكوت</name>
</ns1:مرحبا>
</SOAP-ENV:الجسم>
</SOAP-ENV:Envelope>
في رؤوس HTTP، سترى أن SOAPAction عبارة عن سلسلة فارغة، وهي قيمتها الافتراضية. يمكن لأسلوب الخدمة الخاص بك تعيين قيمة SOAPAction، ويمكن لرمز العميل الخاص بك استدعاء الطريقة التي تحدد SOAPAction كمعلمة.
في حمولة XML، يمكنك أن ترى أن NuSOAP يستخدم ترميز ISO-8859-1 المعروف باسم Latin-1 من أجل تحديد ترميز مختلف، يمكنك تعيين سمة Soap_defencoding على مثيل Soapclient. تقع على عاتق المبرمج بالطبع مسؤولية تشفير بيانات المعلمات باستخدام التشفير المحدد. لحسن الحظ، توفر PHP العديد من الوظائف لتشفير وفك تشفير بيانات التشفير الأكثر شيوعًا في SOAP، مثل UTF-8.
شيء آخر يجب ملاحظته هو أن العنصر يحدد الطريقة التي سيتم استدعاؤها. يتم وضع العنصر المسمى hello تحت اسم المجال http://tempuri.org . يعد تحديد اسم المجال الحقيقي من أفضل الممارسات وهو أيضًا شائع جدًا في العديد من الخدمات . انه ضروري. يتم عرض مستند مستقبلي هنا:
تستجيب خدمة SOAP على النحو التالي:
HTTP/1.1 200 OK
الخادم: مايكروسوفت-IIS/5.0
التاريخ: الأربعاء 03 نوفمبر 2004 الساعة 21:32:34 بتوقيت جرينتش
X-مدعوم من: ASP.NET
مدعوم من X: PHP/4.3.4
الخادم: خادم NuSOAP v0.6.8
خادم X-SOAP: NuSOAP/0.6.8 (1.81)
نوع المحتوى: نص/xml؛
طول المحتوى: 556
<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope
SOAP-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:الجسم>
<ns1:helloResponse xmlns:ns1=" http://tempuri.org ">
<return xsi:type="xsd:string">مرحبًا، سكوت</return>
</helloResponse>
</SOAP-ENV:الجسم>
</SOAP-ENV:Envelope>