ساخت فایل وب سرویس WSDL در PHP

  • آپدیت شده در تاریخ

ساخت فایل وب سرویس WSDL در PHP

در قسمت قبل (ساخت وب سرویس با php و soap) ایجاد یک اپلیکیشن سازگار را با استفاده از پروتکل SOAP بررسی کردیم. همینطور نشان دادیم که ساخت سرور و کلاینت SOAP با کتابخانه NuSOAP چقدر آسان است اما در مقاله آموزشی PHP ساخت فایل وب سرویس WSDL در PHP می خواهیم WSDL را که در هنگام کار با SOAP حتما استفاده خواهد شد را توضیح دهیم.

در اینجا ما در ارتباط با فایل های WSDL و اینکه چطور می توان از آنها استفاده کرد بحث خواهیم کرد همچنین به شما نشان می دهیم که به چه صورت می توان فایل WSDL  را با NuSOAP ایجاد کنید و آن را با مثال های سرور و کلاینت SOAP که در قسمت قبل ایجاد کردیم ترکیب کنیم.

فایل وب سرویس WSDL چیست

WSDL (مخفف کلمات Web Service Description Language) که سندهایی از نوع XML هستند که اطلاعات و فراداده هایی را برای سرویس SOAP ارائه می کنند که شامل اطلاعاتی در ارتباط با توابع یا متدهای وب سرویس است که برنامه را قادر می سازد تا آن استفاده کند (مانند آرگومان های تابع). بوسیله ایجاد فایل های WSDL، سروریس شما برای مصرف کنندگان در دسترس قرار می گیرد. که تعاریفی که برای ارسال درخواست های معتبر لازم است را ارائه می کند. شما می توانید فایل های WSDL را به عنوان یک قرار داد کامل برای ارتباط اپلیکیشن ها فرض کنید. اگر شما می خواهید که استفاده از سرویستان آسان باشد باید WSDL را در برنامه نویسی SOAP در نظر یگیرید.

ساختار WSDL:

همانند پیام های SOAP، فایل های WSDL دارای یک طرح خاص هستند و عناصر خاص باید در محل های مختص به خودشان قرار بگیرند در زیر عناصر اصلی برای ایجاد یک فایل وب سرویس WSDL را ملاحضه می کنید.در ادامه راجع به استفاده از آن ها توضیح می دهیم.

عنصر ریشه در فایل 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 را باز کنید و کد زیر را در آن وارد کنید.

در واقع این همان کد قبلی با دو تغییر است. اولین تغییر اضافه کردن فراخوانی تابع 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 که در قسمت قبل ایجاد کردیم را باز کنید و کد زیر را که سازنده کلاینت است را:

به:

تغییر دهید. پارامتر دوم در nusoap_client تعیین می کند که سازنده NuSOAP با دریافت WSDL ایجاد شود. حالا فایل productlistclient.php را در مرورگر خود اجرا کنید، باید همان نتایح قبل را مشاهده کنید با این تفاوت که اینبار شما از قدرت WSDL استفاده کرده اید.

نتیجه گیری:

در قسمت دوم ما اهمیت استفاده از WSDL را جهت قابلیت همکاری و سازگاری را مرور کردیم و در ارتباط با عناصر مختلف و تعاریفشان که فایل WSDL را ایجاد می کنند بحث کردیم سپس نشان دادیم که چطور می توانید به راحتی با استفاده از NuSOAP فایل WSDL را ایجاد کنید، در نهایت ما سرور و کلاینت SOAP را برای شرح طریقه استفاده از WSDL تغییر دادیم.

هر مشکلی در پیاده سازی کد های ساخت فایل وب سرویس WSDL در PHP داشتید . از قسمت نظرات با ما در ارتباط باشید , سریعا پاسخگوی سوالات شما هستیم .

موفق و پیروز باشید

حسن شفیعی توسعه دهنده وب و موبایل مدیر سایت علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. اگر نیاز به برنامه نویس برای انجام پروژه و نوشتن اسکریپت های سمت وب, اپلیکیشن های اندروید و ios, پیدا کردن راه حل توسعه و غیره داشتید حتما از طریق تماس با ما/ واتساپ/ تلگرام بهم پیام بدید. برایتهیه هاست مطمین و پرسرعت کلیک کنید
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۷)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. mystery ۶ آبان ۱۴۰۰

    سلام وققتون بخیر من با توجه به اموزش های شما پیش رفتم و ارور زیر را دریافت کردم
    Array
    (
    [faultcode] => SOAP-ENV:Client
    [faultactor] =>
    [faultstring] => error in msg parsing:
    xml was empty, didn’t parse!
    [detail] =>
    )

    و در ادامه
    Request
    POST /soap/main.php HTTP/1.0
    Host: localhost
    User-Agent: NuSOAP/0.9.5 (1.123)
    Content-Type: text/xml; charset=ISO-8859-1
    SOAPAction: “urn:userInfo#getName”
    Content-Length: 517

    shaqayeq
    Response
    HTTP/1.0 500 Internal Server Error
    Date: Thu, 28 Oct 2021 20:18:54 GMT
    Server: Apache/2.4.39 (Win64) OpenSSL/1.1.1c PHP/7.3.7
    X-Powered-By: PHP/7.3.7
    Status: 500 Internal Server Error
    X-SOAP-Server: NuSOAP/0.9.5 (1.123)
    Content-Length: 689
    Connection: close
    Content-Type: text/xml; charset=ISO-8859-1

    SOAP-ENV:Clienterror in msg parsing:
    xml was empty, didn't parse!

    ممنون میشم کمکم کنید

    پاسخ
  2. حسین ۱۶ شهریور ۱۳۹۸

    با سلام
    برنامه رو نوشتم هنگام اجرا بهم چنین اروری نشون میده
    SoapClient::SoapClient(): Invalid parameters

    پاسخ
    1. حسن شفیعی ۱۶ شهریور ۱۳۹۸

      سلام. فایل wsdl رو بدرستی به متد پاس دادید؟ باید کد خودتون رو ارسال کنید تا بشه بهتر راهنمایی کرد

      پاسخ
  3. میلاد مهدوی ۹ مرداد ۱۳۹۷

    سلام
    میخوام به وب سرویس تامین اجتماعی وصل بشم ارور دارم که
    Server was unable to process request. —> Object reference not set to an instance of an object.
    تو فایل راهنماشم اومده جهت استفاده از وب سرویس از کلاس PraclinicWebService باید Instance ساخته شود.
    و همین طور کلاس های مختلف داده که گفته ازش instance بسازید.
    ولی من اگه new بگیرم خطا میده که کلاس وجود نداره !
    شما میتونید راهنمایی کنید ؟

    پاسخ
    1. حسن شفیعی ۹ مرداد ۱۳۹۷

      سلام . از new nusoap_client باید برای ساختن نمونه ازش استفاده کنید و بعد یکی از متدها رو فراخوانی کنید.

      در مورد جزییات این وب سرویس اطلاعی ندارم. میتونید کدهای نمونه رو بررسی کنید و یا داکیومنت رو با دقت بیشتری مطالعه بفرمایید

      موفق باشید.

      پاسخ
  4. Reza.dev ۲۲ اسفند ۱۳۹۶

    سلام. چرا در سال ۲۰۱۸ هنوز از nuSOAP استفاده میکنید؟ در صورتی از php5 اکستنشن SOAP اومده؟

    پاسخ
    1. حسن شفیعی ۲۲ اسفند ۱۳۹۶

      سلام . خب یکی از مزیت هاش همین مقاله ای که خواندید هستش ینی سایت فایل های WSDL برای وب سرویس .
      و مورد دیگه اینکه با PHP4 سازگاره با اینکه دیگر استفاده نمیشه

      بک سری از متد های از پیش ساخته شده هم داره که هنگام کار با soap باید خودتون بنویسید

      به هر حال تفاوت چندان زیادی ندارد و میتونید از هر دو به سلیقه خود استفاده کنید .

      موفق باشید

      پاسخ
دوره های آموزشی