در قسمت قبل ایجاد یک اپلیکیشن سازگار را با استفاده از پروتکل SOAP بررسی کردیم. همینطور نشان دادیم که ساخت سرور و کلاینت SOAP با کتابخانه NuSOAP چقدر آسان است اما در این قسمت می خواهیم WSDL را که در هنگام کار با SOAP حتما استفاده خواهد شد را توضیح دهیم.
در اینجا ما در ارتباط با فایل های WSDL و اینکه چطور می توان از آنها استفاده کرد بحث خواهیم کرد همچنین به شما نشان می دهیم که به چه صورت می توان فایل WSDL را با NuSOAP ایجاد کنید و آن را با مثال های سرور و کلاینت SOAP که در قسمت قبل ایجاد کردیم ترکیب کنیم.
در ادامه مطلب همراه من باشید.
فایل های WSDL چیست؟
WSDL (مخفف کلمات Web Service Description Language) که سندهایی از نوع XML هستند که اطلاعات و فراداده هایی را برای سرویس SOAP ارائه می کنند که شامل اطلاعاتی در ارتباط با توابع یا متدهای وب سرویس است که برنامه را قادر می سازد تا آن استفاده کند (مانند آرگومان های تابع). بوسیله ایجاد فایل های WSDL، سروریس شما برای مصرف کنندگان در دسترس قرار می گیرد. که تعاریفی که برای ارسال درخواست های معتبر لازم است را ارائه می کند. شما می توانید فایل های WSDL را به عنوان یک قرار داد کامل برای ارتباط اپلیکیشن ها فرض کنید. اگر شما می خواهید که استفاده از سرویستان آسان باشد باید WSDL را در برنامه نویسی SOAP در نظر یگیرید.
ساختار WSDL:
همانند پیام های SOAP، فایل های WSDL دارای یک طرح خاص هستند و عناصر خاص باید در محل های مختص به خودشان قرار بگیرند در زیر عناصر اصلی برای ایجاد یک فایل WSDL را ملاحضه می کنید.در ادامه راجع به استفاده از آن ها توضیح می دهیم.
<definitions>
<types>
........
</types>
<message>
<part></part>
</message>
<portType>
.......
</portType>
<binding>
....
</binding>
<service>
....
</service>
</definitions>
عنصر ریشه در فایل WSDL، عنصر difinition است که منطقی است چون یک فایل WSDL تعریفی از تعریف یک وب سرویس است. عنصر types در ارتباط با نوع های داده به کار برده شده در WSDL و طرح های XML توضیح می دهد. عنصر message که تعریفی از عناصر داده برای سرویس است، هر عنصر message می تواند شامل یک یا چند عنصر part باشد. عنصر portType عملیاتی که بوسیله وب سرویس شما و پیام های درخواست و پاسخ انجام می شود را تعریف می کند. عنصر binding شامل تعریف قالب داده برای یک portType خاص است در نهایت ما عنصر service را مشاهده می کنیم که مجموعه ای از عناصر سرویس است که شامل آدرس سرویس می باشد.
واژگان در نامگذاری نسخه دوم از WSDL تغییراتی داشته است به طور مثال portType به interface تبدیل شده است از آنجا که پشتیبانی از WSDL 2.0 فعلا کم است ما WSDL 1.0 را برای توضیح انتخاب کردیم.
ایجاد یک فایل WSDL:
نوشتن فایل های WSDL به صورت دستی کاری بسیار سنگین است زیرا شامل برچسب های خاص و معمولا طولانی است، موردی که در ارتباط با NuSOAP اهمیت دارد، توانایی ایجاد فایل WSDL برای ماست. حالا باید سرور SOAP که در جلسه قبل ایجاد کردیم را با WSDL تطبیق دهیم.
فایل productlist.php را باز کنید و کد زیر را در آن وارد کنید.
<?php
require_once "lib/nusoap.php";
function getProd($category) {
if ($category == "books") {
return join(",", array(
"The WordPress Anthology",
"PHP Master: Write Cutting Edge Code",
"Build Your Own Website the Right Way"));
}
else {
return "No products listed under that category";
}
}
$server = new soap_server();
$server->configureWSDL("productlist", "urn:productlist");
$server->register("getProd",
array("category" => "xsd:string"),
array("return" => "xsd:string"),
"urn:productlist",
"urn:productlist#getProd",
"rpc",
"encoded",
"Get a listing of products by category");
$POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
$server->service($POST_DATA);
exit();
در واقع این همان کد قبلی با دو تغییر است. اولین تغییر اضافه کردن فراخوانی تابع configureWSDL است، این متد نقش یک پرچم را برای سرویس ما بازی می کند بدین صورت که به سرور اعلام می کند که فایل WSDL را برای سرویس ایجاد کند. اولین آرگومان نام سرویس است و دومی فضای نام برای سرویس ما که در پلتفرم هایی مانند: Apache Axis و .Net بهتراست که مقدار دهی شود تا سازگاری کامل تری ایجاد شود. دومین تغییر اضافه کردن یک آرگومان دیگر به متد register است که به صورت زیر است:
- getProd: نام تابع است.
array("category" => "xsd:string")
: آرگومان های ورودی و نوع داده را برای تابع getProd تعریف می کند.array("return" => "xsd:string")
: مقدار برگشتی تابع و نوع آن را تعریف می کند.urn:productlist
: فضای نام را تعریف می کند.urn:productlist#getProd
: عمل SOAP را تعریف می کند.rpc
: نوع فراخوانی را تعریف می کند (که می تواند rpc یا document باشد).- encoded: مقدار را برای ویژیگی use تعریف می کند (encoded یا literal می تواند استفاده شود).
پارمتر آخر هم مستنداتی در ارتباط با تابع getProd و آنچه که انجام می دهد می باشد.
حالا در مرورگر خود آدرس http://yourwebroot/productlist.php?wsdl
را وارد کنید. توجه داشته باشید که yourwebroot لوکال هاست یا آدرس وب سایت شماست، حال باید فایل WSDL ایجاد شده را مشاهده کنید، سورس را کپی کنید و آن را در فایلی به نام products.wsdl دخیره کنید و در پوشه وب سایت قرار دهید.
استفاده از فایل WSDL در سمت کلاینت:
ما سرور SOAP را برای ایجاد فایل WSDL ویرایش کریم حالا باید کلاینت SOAP را برای استفاده از آن تغییر دهیم. فایل productlistclient.php که در قسمت قبل ایجاد کردیم را باز کنید و کد زیر را که سازنده کلاینت است را:
$client = new nusoap_client("http://localhost/nusoap/productlist.php");
به:
$client = new nusoap_client("products.wsdl", true);
تغییر دهید. پارامتر دوم در nusoap_client تعیین می کند که سازنده NuSOAP با دریافت WSDL ایجاد شود. حالا فایل productlistclient.php را در مرورگر خود اجرا کنید، باید همان نتایح قبل را مشاهده کنید با این تفاوت که اینبار شما از قدرت WSDL استفاده کرده اید.
نتیجه گیری:
در قسمت دوم ما اهمیت استفاده از WSDL را جهت قابلیت همکاری و سازگاری را مرور کردیم و در ارتباط با عناصر مختلف و تعاریفشان که فایل WSDL را ایجاد می کنند بحث کردیم سپس نشان دادیم که چطور می توانید به راحتی با استفاده از NuSOAP فایل WSDL را ایجاد کنید، در نهایت ما سرور و کلاینت SOAP را برای شرح طریقه استفاده از WSDL تغییر دادیم.
php | soap | web service | wsdl |