وب سرویس SOAP چیست؟ – به زبان ساده


وب سرویس SOAP در حوزه برنامه نویسی وب کاربرد دارد. در این مطلب به این سوال پاسخ داده میشود که «وب سرویس SOAP چیست؟» و پیرامون قوانین و دستورالعملهایی بحث خواهد شد که یک وب سرویس را تبدیل به وب سرویس SOAP میکنند. همچنین مطالبی راجع به سایر مباحث مرتبط با وب سرویس SOAP از جمله مزایا و معایب آن، وب سرویس REST و تفاوتهای آنها و همچنین API و تفاوت آن با وب سرویس ارائه شده است. در طول این مقاله، مثالهای مختلفی برای درک بهتر مفاهیم بیان شده به کار گرفته شده است. علاوه بر این، دورهها و منابع آموزشی مرتبط نیز در انتهای این نوشته معرفی شدهاند.
یک وب سرویس SOAP وب سرویسی است که سه مشخصه اصلی دارد. هر وب سرویسی که این سه مشخصه را داشته باشد، یک وب سرویس SOAP به حساب میآید در ادامه این مطلب، سه مشخصه وب سرویس SOAP معرفی خواهند شد. اما پیش از پرداختن به مفهوم وب سرویس SOAP ، بهتر است ابتدا به این سوال پاسخ داده شود که وب سرویس چیست؟ بنابراین، در ادامه به شرح مفهوم یک وب سرویس پرداخته شده است.
وب سرویس چیست ؟
در این بخش، پیرامون مفهوم اساسی وب سرویسها و دلیل استفاده از آنها بحث شده است. یک وب سرویس شامل خدماتی است که از طریق وب در دسترس باشند. این تعریف کوتاه به میزان زیادی واضح و شفاف به نظر میرسد، اما بهتر است مفهوم وب سرویس بیشتر شکافته شود.
برای توضیح بیشتر، میتوان از یک مثال ساده استفاده کرد. در ادامه با یک مثال، مفهوم وب سرویس و دلیل استفاده از آن بیشتر شرح داده شده است.
چرا نیاز به وب سرویس وجود دارد؟
وب سرویس امکان ارتباط مستقل از پلتفرم (در اینجا منظور بیشتر سیستمعامل است) را فراهم میکند. به وسیله وب سرویس، وب اپلیکیشنهای مختلف میتوانند فارق از پلتفرم و فناوری ساخت با یکدیگر ارتباط برقرار کرده و تبادل داده انجام دهند. برای درک بهتر لزوم نیاز به وب سرویس، میتوان از یک مثال استفاده کرد. این کار در ادامه انجام شده است.
مثالی از کاربرد وب سرویس
برای مثال میتوان یک وبسایت فروش آنلاین بلیت را در نظر گرفت. در این وبسایت، بلیت هواپیما از شرکتهای هواپیمایی مختلفی به فروش میرسد. وبسایت فروش بلیت باید اطلاعات بلیت و پرواز هر یک از وبسایتهای شرکتهای هوایی را دریافت کند. به فروشنده بلیت، کلاینت (استفاده کننده از خدمات) و به هر یک از شرکتهای هواپیمایی، سرور (ارائه دهنده خدمات) گفته میشود. واضح است که ارائهدهنده خدمات هیچگاه اجازه دسترسی مستقیم به پایگاه داده خود را به سرویس گیرنده نخواهند داد. یک راهحل ممکن است این باشد که این اطلاعات در بازههای زمانی مشخصی توسط ارائهدهنده به کلاینت ارسال شوند. اما، با توجه به اینکه اطلاعات روی سرورها هر ثانیه بهروزرسانی میشوند و تغییر میکنند، ممکن است پروازی لغو شده باشد اما سایت فروشنده همچنان بلیت آن پرواز را به فروش برساند.
بنابراین برای جلوگیری از بروز چنین مشکلاتی، هر یک از شرکتهای هواپیمایی برای ارسال اطلاعات پروازها، وب سرویس خود را ارائه میدهند. وبسایت فروش بلیت (کلاینت) از این وب سرویسها برای برقراری ارتباط با شرکتهای مختلف هواپیمایی و دریافت اطلاعات لازم استفاده میکند.
کلاینت باید برای استفاده از وب سرویسها درخواست ارسال کند. واضح است که برای افزایش سرعت و کاهش پیچیدگی ارتباط، درخواست و پاسخ بین کلاینت و سرور باید در قالب مشترکی انجام شود و همچنین قواعد یکسانی برای استفاده از وب سرویسها وجود داشته باشد. وجود پروتکلها و مشخصههایی مانند SOAP نیز به همین دلیل است. بنابراین، میتوان یک وب سرویس را این گونه توصیف کرد:
- وب سرویس خدماتی است که از طریق وب در دسترس است.
- یک وب سرویس امکان ارتباط میان برنامههای کاربردی را از طریق وب فراهم میکند.
- وب سرویس یک پروتکل یا قالب استاندارد برای برقراری ارتباط فراهم میسازد.
دلیل استفاده از وب سرویس چیست؟
در خصوص دلیل استفاده از وب سرویس میتوان گفت که وب سرویس امکان ارتباط مستقل از پلتفرم (بستر | سیستمعامل) را فراهم میکند: این یعنی، یک اپلیکیشن ساخته شده با زبان C++ در پلتفرم ویندوز میتواند با یک اپلیکیشن جاوا در پلتفرم لینوکس از طریق وب سرویس ارتباط برقرار کنند. به این ترتیب، مفهوم وب سرویس و دلیل نیاز به آن شرح داده شد.
همچنین، مشخص شد که عملیات درخواست و پاسخ در استفاده از وب سرویسها نیاز به وجود قوانین خاصی دارد. اکنون زمان مناسبی است تا به معرفی مب سرویس SOAP و مباحث پیرامون آن پرداخته شود.
وب سرویس SOAP چیست؟
هر وب سرویسی که از «قوانین وب سرویس SOAP» پیروی کند، به عنوان یک وب سرویس SOAP شناخته خواهد شد. به این مجموعه قوانین «SOAP Web Services Specifications» یعنی «مشخصههای وب سرویس SOAP» گفته میشود. بنابراین، مجموعهای از قوانین و مشخصهها وجود دارند و در صورتی که یک وب سرویس از این قوانین تبعیت کند، آن وب سرویس به عنوان یک وب سرویس SOAP شناخته خواهد شد.
در اینجا دو سوال مهم وجود دارد:
- قوانین و استانداردهای وب سرویس SOAP چه هستند؟
- چه کسی قوانین وب سرویس SOAP را تعیین کرده است؟
بهتر است ابتدا به سوال دوم پاسخ داده شود. بنابراین، در ادامه به این مهم پرداخته شده است.
چه کسی قوانین وب سرویس SOAP را تعیین کرده است؟
سازمان بینالمللی W3C استانداردهای باز را برای شبکه جهانی وب توسعه میدهد. W3C سرنامی برای World Wide Web Consortium و به معنی ائتلاف وب جهانگستر است. قوانین وب سرویس SOAP توسط W3C وضع شده است. در ادامه به این سوال مهم و اساسی پاسخ داده شده است که قوانین و استانداردهای وب سرویس SOAP چه هستند؟
مشخصههای وب سرویس SOAP چه هستند؟
قوانین وب سرویس SOAP که توسط W3C وضع شدهاند، به دو دسته قوانین یا مشخصه (Specification) اساسی و قوانین تعمیمیافته تقسیم میشوند. مشخصههای اساسی وب سرویس SOAP شامل WSDL ،SOAP و UDDI است. هر کدام از این دو مجموعه قوانین شامل تعدادی استاندارد هستند. این دستهبندی در ادامه فهرست شده است:
- قوانین اساسی (Basic Specifications)
- SOAP
- WSDL
- UDDI
- قوانین تعمیمیافته (Extended Specifications)
- WS-Security
- WS-Policy
- WS-I
- سایر موارد
مجموعه قوانین تعمیمیافته شامل بحث امنیت و موارد دیگری است که در زمان ایجاد وب سرویسهایی با کاربردهای تجاری از آنها استفاده میشود. اما در این مطلب تمرکز اصلی پیرامون قوانین اساسی است. بنابراین میتوان وب سرویس SOAP را وب سرویسی دانست که از سه استاندارد یا مشخصه WSDL ،SOAP و UDDI تبعیت میکند. در ادامه هر یک از سه مشخصه اساسی یک وب سرویس SOAP شرح داده شده است.
SOAP چیست؟
تا اینجا مشخص شد که یک وب سرویس باید با سه قاعده اساسی مطابقت داشته باشد تا بتوان آن را یک وب سرویس SOAP نامید. این سه قاعده شامل WSDL ،SOAP و UDDI است. در این بخش پیرامون اولین و مهمترین مشخصه وب سرویس SOAP یعنی پروتکل SOAP بحث شده است. SOAP سرنامی برای عبارت «Simple Object Access Protocol» به معنی «قوانین ساده دسترسی به شیٔ» است.
از این اصطلاح تنها تا نسخه ۱.۱ برای اشاره به این پروتکل استفاده شده است و از نسخه 1.2 به بعد تنها از سرنام SOAP برای خطاب قرار دادن آن استفاده میشود. به بیان ساده، پروتکل SOAP شامل مجموعهای از قوانین و تعاریف پیرامون نحوه برقراری ارتباط میان اپلیکیشنها از طریق اینترنت است. برای درک بهتر، در ادامه توضیحات بیشتری ارائه شده است. اما پیش از آن، بهتر است به این سوال پاسخ داده شود که چرا از SOAP استفاده میشود؟
چرا از SOAP استفاده میشود؟
همانطور که بیان شد، نیاز اساسی وباپلیکیشنها ارتباط با یکدیگر از طریق اینترنت است. بهترین راه برای ارتباط میان وباپلیکیشنها استفاده از پروتکل HTTP محسوب میشود، چرا که HTTP به وسیله همه مرورگرها و سرورها پشتیبانی میشود. SOAP برای دستیابی به این هدف، یعنی «برقراری ارتباط میان وباپلیکیشنها به بهترین شکل ممکن» ایجاد شده است. وب سرویس SOAP راه ارتباط میان اپلیکیشنهایی را فراهم میکند که روی سیستمعاملهای متفاوت با فناوریها و زبانهای برنامهنویسی مختلف اجرا میشوند.
در خصوص مفاهیم ارتباط کلاینت-سروری، کلاینت به عنوان مصرفکنندهخدمات (سرویس) و سرور به عنوان ارائهدهنده خدمات شناخته میشوند. مصرفکنندهو ارائهدهنده سرویس از طریق وب سرویسها با هم در ارتباط هستند. پروتکل SOAP بیان میدارد که تمام عملیات تبادل داده، پیام یا اطلاعات بین دو اپلیکیشن کلاینت و سرور باید در یک قالب (Format) مشخصی انجام شود. این قالب مشخص در پروتکل SOAP قالب XML است. بنابراین تمام اطلاعات و پیامها باید از طریق یک قالب مشترک رد و بدل شوند. قالب مشترکی که SOAP از آن استفاده میکند، XML است. اما این تبادل اطلاعات نمیتواند تنها به صورت یک فایل XML ساده باشد. در واقع «پیام XML» باید یک «پیام SOAP» باشد. اما پیام SOAP چیست و چه ویژگیهایی دارد؟ در ادامه به این مسئله پرداخته شده است.
پیام SOAP چیست ؟
پیام SOAP به پیامی گفته میشود که در قالب XML و دارای یک ساختار مشخص است. ساختار یک پیام SOAP باید شامل موارد زیر باشد:
- بسته (پاکت نامه | Envelope)
- سرآیند (سربرگ | Header)
- بدنه (Body)
اجزای پیام SOAP
پیام SOAP شامل یک پاکت نامه است که به عنوان عنصر ریشه شناخته میشود. در داخل پاکت، به صورت اختیاری میتوان یک سرآیند داشت. در سرآیند اطلاعات مختلفی پیرامون انواع پیچیده (Complex Type)، تایید اعتبار، مسیریابی و موارد دیگر وجود دارد. به طور کلی در عنصر سرآیند اطلاعاتی پیرامون پیام SOAP ارائه میشود. علاوه بر سرآیند، یک بدنه هم وجود دارد.
این بدنه شامل محتوای درخواست ارسالی است. بنابراین، تمام پارامترهایی که قصد ارسال آنها به عنوان یک درخواست وجود دارد، در بدنه گنجانده میشود. در ادامه، مثالی از یک پیام SOAP برای درک بهتر اجزاء و ساختار پیام SOAP آمده است.
مثالی از یک پیام SOAP
در تصویر فوق، کدهای XML مربوط به یک پیام SOAP نمایش داده شده است. در این پیام سرآیندی وجد ندارد؛ زیرا همانطور که بیان شد، سرآیند یک عنصر اختیاری است و میتواند در پیام قرار داده نشود. اما در صورتی که نیاز به ارائه شناسه و رمز عبور و یا برخی اطلاعات از نوع پیچیده (Complex Type) وجود داشته باشد، باید از سرآیند استفاده کرد. در داخل پاکت، بدنه SOAP قرار دارد که پارامترهای اصلی درخواست در آن قرار دارند. در این مثال، این پارامترها شامل مواردی مثل نام، نام خانوادگی و سایر موارد است. به این ترتیب، یک پیام SOAP معرفی و مثالی برای آن ارائه شد. در ادامه، ساختار کلی پیام SOAP ارائه شده است.
ساختار کلی پیام SOAP
کدهای مربوط به ساختار کلی پیام SOAP در قالب XML به صورت زیر است:
هر وب سرویس SOAP باید از استانداردهای پیام SOAP پیروی کند. علاوه بر این، همانطور که بیان شد، یک وب سرویس SOAP باید از مشخصههای دیگری هم پیروی کند. در ادامه به معرفی و شرح دو مشخصه دیگر یک وب سرویس SOAP یعنی WDSL و UDDI پرداخته خواهد شد. پیش از آن، مجموعه دورههای آموزشی توسعه وب برای علاقهمندان به این حوزه معرفی شده است.
WSDL و UDDI چه هستند؟
در این بخش پیرامون دو مفهوم ابتدایی و بسیار مهم در وب سرویسها بحث شده است. همانطور که بیان شد، در سیستم کلاینت-سروری، مصرفکنندهخدمات و ارائهدهنده سرویس برای تبادل داده از طریق وب سرویسها با یکدیگر ارتباط برقرار میکنند. در این بخش مشخص خواهد شد که WSDL و UDDI در معماری وب سرویسها چه نقشی ایفا میکنند.
در صورتی که یک مصرفکنندهخدمات بخواهد از یک وب سرویس استفاده کند، باید اطلاعات کاملی در خصوص تمام جزئیات آن وب سرویس داشته باشد. این اطلاعات میتواند پاسخی به این سوالات باشد:
- آن وب سرویس چیست؟
- اجزاء مختلف آن چه هستند؟
- قابلیتهای مختلف آن چه هستند؟
- چه پارامترهایی دارد؟
- انواع بازگشتی آن چیست؟
- و دقیقاً چطور باید از آن وب سرویس استفاده کرد؟
بنابراین، کلاینت باید اطلاعات کاملی راجع به وب سرویسی داشته باشد که قصد برقراری ارتباط با آن را دارد. نقش WSDL در اینجا مشخص میشود. در ادامه پیرامون چیستی WSDL توضیحات لازم ارائه شده است.
WSDL چیست؟
برای اینکه کلاینت بتواند به اطلاعات کامل پیرامون وب سرویس مورد نظر خود دست یابد، هر ارائهدهنده سرویس (سرور) توصیفی در خصوص وب سرویسهای خود ارائه میدهد. این توصیف به نوعی یک رابط برای وب سرویس به حساب میآید که تمام خواص و قابلیتهای وب سرویس در آن شرح داده شده است. این رابط، مبتنی بر XML است و به آن «WSDL» گفته میشود. WSDL سرنامی برای «Web Services Description Language» و به معنی «زبان توصیف وب سرویس» است. تعدادی از توسعهدهندگان WSDL را به صورت «ویزدِل» تلفظ میکنند.
بنابراین میتوان گفت، زبان توصیف وب سرویس (WSDL) یک رابط مبتنی بر XML برای وب سرویسها به شمار میرود که تمام ویژگیها و قابلیتهای آنها را توصیف میکند. ممکن است این سوال وجود داشته باشد که چرا WSDL بر پایه XML است؟ در پاسخ میتوان گفت که اطلاعات WSDL باید برای ماشین قابل خواندن باشد. همچنین، باید این امکان وجود داشته باشد که بتوان از برخی ابزارها و زبانهای برنامهنویسی جهت انتقال WSDL و تولید ساختار درخواست و پاسخ، استفاده کرد. در ادامه برای درک بهتر مفهوم WSDL از یک مثال استفاده شده است.
مثالی از یک WSDL
برای دیدن یک مثال به صورت آنلاین میتوان عبارت «Online WSDL» را در گوگل جستجو و یکی از گزینهها، مثلاً «wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org» را انتخاب کرد. در صفحه باز شده، کدهای XML مربوط به WSDL یک وب سرویس موجود است و میتوان این وب سرویس را از طریق آدرس زیر فراخوانی کرد:
در این صفحه، تمامی توصیفها و مشخصات پیرامون وب سرویس مربوطه در قالب XML موجود است. مثلاً چه درخواستهایی وجود دارد؟ اجزاء، پارامترها و نوع داده درخواستها چیست؟ پارامترها، اجزاء و ساختار پیام پاسخ چه هستند؟ ممکن است خواندن و درک همه چیز درباره یک وب سرویس از طریق این سند XML کار دشواری باشد. بنابراین، ابزارهایی وجود دارد که میتوانند این سند XML را تحلیل (Parse) و همه گامها و درخواستها را از این سند WSDL تولید کنند.
بنابراین، همانطور که در تصویر زیر نمایش داده شده است، WSDL یک واسط برای وب سرویس SOAP به حساب میآید. فراهم کننده خدمات (سرور | وب سرور) این رابط را برای وب سرویسهای خود ایجاد میکند. مصرفکنندهخدمات (کلاینت) میتواند سند WSDL را دریافت و بر اساس اطلاعات آن از وب سرویسهای آن سرور استفاده کند و درخواست بفرستد.
UDDI چیست؟
برای ارائه تعریفی از UDDI و پاسخ به این سوال که «UDDI چیست؟» باید گفت، دو حالت برای دسترسی کلاینت به سند WSDL وجود دارد:
- در این روش فرض بر این است که ارائه دهنده خدمات و مصرفکنندهاز قبل یکدیگر را شناسایی کرده باشند. در این حالت، ارائهدهنده سرویس میتواند این سند WSDL یا آدرس WSDL را به کلاینت تحویل بدهد و کلاینت از وب سرویس استفاده کند.
- در حالت دوم فراهم کننده سرویس و کلاینت یکدیگر را نمیشناسند. در چنین حالتی این سوال به وجود میآید که یک مصرفکنندهسرویس چگونه میتواند به سند WSDL دسترسی پیدا کند؟
در پاسخ به این سوال باید گفت که همه ارائه دهندگان وب سرویس، توصیف وب سرویسهای خود را (از طریق WSDL) در یک دایرکتوری یا بایگانی آنلاین منتشر میکنند. کلاینتها میتوانند این بایگانیها را جستجو کنند و به سند WSDL مورد نظر خود دست یابند. به این بایگانی یا دایرکتوری آنلاین، «UDDI» گفته میشود. UDDI سرنامی برای عبارت «Universal Description, Discovery and Integration» و به معنی «توصیف، اکتشاف و یکپارچگی فراگیر» است.
UDDI یک دایرکتوری آنلاین است که ارائهدهنده خدمات میتواند سند WSDL خود را در آن منتشر کند تا مصرفکنندهامکان جستجو و دسترسی به WSDL را داشته باشد.بدین ترتیب، وب سرویس SOAP و مشخصههای آن تعریف شدند و شناخت کافی از این مفهوم به دست آمد. در ادامه با هدف کسب اطلاعات بیشتر، مزایا و معایب وب سرویس SOAP بیان شدهاند.
مزایا و معایب وب سرویس SOAP
در این بخش به بررسی و شرح مزایا و معایب وب سرویس SOAP پرداخته شده است تا آشنایی بیشتری با این وب سرویس حاصل شود. در ادامه، ابتدا به بیان مزایای وب سرویس SOAP پرداخته شده است.
مزایای وب سرویس SOAP
مزایای وب سرویس SOAP را میتوان شامل موارد زیر دانست:
- WS Security: در ابتدای متن به مشخصههای تعمیمیافته وب سرویس SOAP اشاره شد. یکی از این مشخصهها قابلیت امنیتی WS Security است. میتوان مشخصه امنیتی WS Security را یکی از نقاط قوت وب سرویس SOAP در نظر گرفت.
- مستقل بودن از زبان برنامهنویسی و پلتفرم: این مسئله که میتوان وب سرویس SOAP را در هر زبان برنامهنویسی دلخواه و هر پلتفرمی به کار گرفت نیز به عنوان یکی از برتریها و مزایای وب سرویس SOAP شناخته میشود.
- استفاده از XML: پیامهای SOAP در قالب XML ارسال میشوند. با توجه به محبوبیت و سادگی XML، میتوان استفاده وب سرویس SOAP از XML را نیز به عنوان یکی دیگر از مزایای این نوع وب سرویس در نظر گرفت.
- مقیاسپذیری مطلوب: وب سرویس SOAP برای انتقال پیام از پروتکل HTTP استفاده میکند. به دلیل اینکه HTTP رایجترین پروتکل انتقالی محسوب میشود، میتوان نتیجه گرفت که مقیاسپذیری SOAP بسیار افزایش مییابد و این یک نقطه برتری برای وب سرویس SOAP به حساب میآید.
با ارائه فهرستی از مزایای وب سرویس SOAP ، اکنون در ادامه به شرح برخی از معایب وب سرویس SOAP پرداخته شده است.
معایب وب سرویس SOAP
هر استاندارد و مجموعه مشخصهای علاوه بر مزایایی که منجر به شیوع استفاده از آن میشود، دارای معایبی نیز هست. معمولاً این معایب منجر به شکلگیری و ارائه استانداردها و قواعد جدیدتر میشوند.
در خصوص وب سرویس SOAP این بهروزرسانیها با ارائه REST صورت گرفته است. پیرامون REST در ادامه مطلب توضیحاتی ارائه خواهد شد. اما در این بخش و در ادامه، فهرستی از معایب وب سرویس SOAP ارائه شده است.
- سرعت پایین: همانطور که بیان شد، SOAP از قالب XML استفاده میکند. برای خواندن XML باید آن را به اصطلاح Parse کرد که امری زمانبر است. همچنین، SOAP استانداردهای بسیاری دارد که در هنگام توسعه و ساخت اپلیکیشنهای مبتنی بر SOAP باید رعایت شوند. بنابراین، وب سرویس SOAP سرعت پایینی دارد و پهنای باند و منابع بیشتری را مصرف میکند.
- وابستگی به WSDL: در وب سرویس SOAP از WSDL استفاده میشود و هیچ مکانیزم و سازِکار دیگری برای پیدا کردن و کشف یک سرویس وجود ندارد؛ این مسئله میتواند یکی از معایب وب سرویس SOAP محسوب شود.
با بیان معایب وب سرویس SOAP و همچنین با اشاره به وجود استانداردهای دیگری مانند REST، این سوال در ذهن شکل میگیرد که آیا وب سرویس SOAP یک فناوری قدیمی و منسوخ شده به حساب میآید؟ در ادامه به این سوال پاسخ داده شده است.
آیا وب سرویس SOAP همچنان کاربرد دارد؟
به نظر میرسد باور به منسوخ شدن SOAP چندان منطقی نباشد. وب سرویس SOAP همچنان مورد استفاده قرار گرفته و توسعه داده میشود. اگر چه در کاربردهای جدیدتر استفاده از وب سرویسهای SOAP تا حدودی کاهش یافته است. همانطور که بیان شد، وب سرویس SOAP همچنان مزیتهایی به همراه دارد. یکی از نقاط قوت وب سرویسهای SOAP استفاده از XML است و همچنان ابزارها و کتابخانههای کاملی وجود دارند که پیامهای SOAP را Parse میکنند. اما فناوری جدیدتری به نام REST وجود دارد که همواره در بحثهای پیرامون SOAP مطرح میشود و همراه SOAP با REST مقایسه میشود. بنابراین، در ادامه پیرامون تفاوت وب سرویس SOAP و REST بحث خواهد شد. اما قبل از آن بهتر است به این مسئله پرداخته شود که REST چیست؟
وب سرویسREST چیست؟
در این بخش پیرامون مفهوم REST، معماری اساسی آن و سایر موارد مربوط به وب سرویس REST بحث شده است و مشخص خواهد شد که چطور میتوان یک وب سرویس را وب سرویس RESTful در نظر گرفت. REST مفهوم مهمی در مقوله وب سرویسها به حساب میآید. اگرچه، اغلب این مفهوم به درستی درک نشده است.
وب سرویسها به دو روش اصلی قابل پیادهسازی هستند. یکی از روشهای پیادهسازی که پیشتر به طور کامل معرفی شد، وب سرویس SOAP است. یکی دیگر از روشهای کلیدی در پیادهسازی وب سرویسها، وب سرویس REST محسوب میشود. REST سرنامی برای «REpresentational State Transfer» و به معنی «انتقال حالت بازنمودی» است. در ادامه پیرامون جایگاه REST در معماری کلاینت سروری بحث شده است.
تعریف REST
یک «وب سرویس REST» نوعی از خدمات وب است که ارتباط و تبادل داده میان دو اپلیکیشن را با استفاده از «معماری یا اصول REST» فراهم میسازد.
با این تعریف، همانند وب سرویس SOAP دو سوال به وجود میآید:
- REST چیست؟
- یک وب سرویس باید از چه اصول، محدودیتها و دستورالعملهایی تبعیت کند تا به یک وب سرویس مبتنی بر REST (وب سرویس RESTful) تبدیل شود؟
بنابراین در ادامه به هر یک از سوالات فوق پاسخ داده شده است.
REST چیست؟
REST یا انتقال حالت بازنمودی (REpresentational State Transfer) یک سبک و شیوه معماری است. بنابراین، برخلاف SOAP، رِست یک پروتکل نیست. یعنی هیچگونه مشخصه و قانون اکیدی (مثل قواعد SOAP) برای REST وجود ندارد.
همچنین، REST هیچ بدنه مرکزی ندارد. بنابراین، REST مجموعهای از اصول و دستورالعملهای (Principle) طراحی است و میتوان از این دستورالعملها و الگوهای طراحی برای ایجاد هر نوع سرویسی استفاده کرد. وقتی که از این دستورالعملها در ایجاد یک وب سرویس استفاده شود، یک وب سرویس RESTful (مبتنی بر REST) به دست خواهد آمد. با مشخص شدن مفهوم REST، در ادامه به سوال دوم یعنی «اصول/محدودیتهای REST چیست؟» پرداخته شده است.
اصول REST چیست؟
اصول و محدودیتهای REST برای اینکه یک وب سرویس به عنوان وب سرویس RESTful شناخته شود چیست؟ REST دارای شش اصل/محدودیت به شرح زیر است:
- رابط یکپارچه (Uniform Interface):
- منبع (Resource): همه چیز یک منبع است.
- URI: از طریق یک URI میتوان به هر منبع/دادهای دسترسی داشت.
- HTTP: بهرهگیری صریح از متدهای HTTP
- استقلال از حالت (Stateless): تمام ارتباطات کلاینت-سروری بدون حالت هستند.
- قابلیت ذخیرهسازی موقت (Cacheable): سمت کلاینت رخ میدهد.
- سیستم لایهای (Layered System): لایهها میتوانند بین کلاینت و سرور قرار بگیرند.
- کد در صورت تقاضا (Code on Demand): امکان دانلود و اجرای کد در سمت کلاینت وجود دارد.
در ادامه، پیرامون مفاهیم رابط یکپارچه توضیحات بیشتری ارائه شده است.
رابط یکپارچه
برای تعریف و آموزش رابط یکپارچه، باید با سه مفهوم آشنایی پیدا کرد:
- منبع (Resource): همه جیز یک منبع است.
- URI: به وسیله یک URI میتوان به هر منبع/دادهای دست پیدا کرد.
- HTTP: بهرهگیری صریح از متدهای HTTP
اکنون در ادامه هر یک از مفاهیم بالا شرح داده شده است:
منبع: در REST، مفهوم منابع به این صورت است که میتوان هر اطلاعات و ماژولی را به عنوان یک منبع در نظر گرفت. بنابراین، میتوان منابع را نامگذاری کرده و آنها را برای اپلیکیشن خود تعریف کرد. REST هیچ قوانین اکید و قطعی در خصوص اینکه دقیقاً چه چیزی باید به عنوان یک منبع تعریف شود، تعیین نکرده است. REST بیان میدارد که میتوان هر اطلاعات، داده یا ماژولی را در یک اپلیکیشن به عنوان منبع در نظر گرفت.
URI: مفهوم URI بیان میدارد که میتوان با کمک یک شناساگر منبع یکپارچه (Uniform Resource Identifier) به هر داده یا ماژولی دسترسی پیدا کرد. برای مثال، در صورتی که اپلیکیشنی مطابق با منابع در تصویر بالا ایجاد شود، برای دسترسی به منبع کارمندان (Employees) میتوان از نام دامنه «http://example.com/employees» استفاده کرد. حال اگر قصد دسترسی به یک کارمند خاص وجود داشته باشد، میتوان در انتهای URI شناسه کارمند مربوطه را درج کرد. بر فرض مثال، URI برای کارمندی با شناسه ۱۰، به صورت زیر خواهد بود:
همچنین در صورتی که قصد دسترسی به کارمندان یک واحد اداری (Department) خاص مد نظر باشد، میتوان از URI زیر استفاده کرد:
HTTP: در REST میتوان با استفاده از متدهای HTTP نظیر DELETE ،PUT ،POST ،GET و سایر موارد به هر منبعی یا اطلاعات آن منبع دسترسی یافته و آن را ویرایش کرد. علاوه بر موارد منبع، URI و HTTP، رابط یکپارچه بیان میدارد که میتوان با استفاده از بازنمایی (Representation) منابع را مدیریت کرد. هر منبع میتواند یک بازنمایی داشته باشد. یعنی یک منبع میتواند در قالب HTML ،JSON ،XML و سایر موارد بازنمایی یا ارائه شود. امکان مدیریت و اعمال تغییرات روی این بازنمایی بر حسب نیاز قابل انجام است.
علاوه بر این، در واسط یکپارچه مبتنی بر REST، پیامها خود توضیحگر (Self Descriptive) هستند. یعنی پیامها علاوه بر دادهها، حاوی اطلاعاتی پیرامون آن دادهها نیز هستند. در خصوص سایر قوانین و محدودیتهای REST، مطالبی در نوشته «REST چیست ؟ | همه چیز درباره RESTful API — به زبان ساده» ارائه شده است. با توجه به نکاتی که در این بخش پیرامون REST بیان شد، اکنون میتوان به این سوال مهم پاسخ داد که وب سرویس RESTful چه تفاوتی با یک وب سرویس SOAP دارد؟ در ادامه به این سوال مهم پاسخ داده شده است.
تفاوت REST و SOAP چیست؟
وقتی سخن از نحوه ایجاد وب سرویسها به میان میآید، دو رویکرد رقیب مطرح است. این دو رویکرد SOAP و REST نام دارند. همواره پیرامون رقابت میان SOAP و REST بحثهای جدی در گرفته است. برای شرح تفاوت SOAP و REST بهتر است نحوه ارسال درخواست در هر کدام مورد بررسی قرار بگیرد.
به عنوان مثال در صورتی که قصد دسترسی به جزئیات اطلاعات یک کارمند با شناسه ۱۲۳ وجود داشته باشد، درخواست در وب سرویس SOAP مشابه تصویر زیر خواهد بود:
طبق تصویر فوق، باید تمامی قوانین مشخصههای وب سرویس SOAP رعایت شود. یک پیام SOAP دارای ساختار مشخصی است که شامل Header ،Envelope و Body خواهد بود. در صورتی که قرار باشد همین عملیات در REST انجام شود، با استفاده از یک آدرس ساده و متد GET میتوان به منبع مورد نظر دسترسی داشت:
بنابراین، سادگی و انعطافپذیری REST در برابر SOAP به راحتی قابل ملاحظه است. اغلب در بحث پیرامون وب سرویسها، مفهوم دیگری به نام API نیز مطرح میشود و ممکن است برای افراد بسیاری این سوال وجود داشته باشد که API چیست و چه تفاوتی با وب سرویس دارد؟ همچنین مفاهیم REST و SOAP برای API نیز به کار برده میشوند. بنابراین، در ادامه این مطلب و برای تکمیل آموزش وب سرویس SOAP به معرفی API و شرح تفاوت آن با وب سرویس پرداخته شده است.
API چیست؟
ارتباطات یک امکان خارقالعاده است و تاکنون، اکثر افراد به امکان برقراری ارتباط لحظهای دسترسی دارند و به راحتی میتوانند به سراسر دنیا متصل شوند. با استفاده از کامپیوترهای رومیزی و دستگاههای همراه میتوان فعالیتهای مختلفی را از جمله ارسال پست در شبکههای اجتماعی و خرید آنلاین انجام داد. ارتباط میان اپلیکیشنهای مختلف و امکان برقراری ارتباط در اینترنت از طریق API انجام میشود. API سرنامی برای Application Programming Interface و به معنی رابط برنامهنویسی اپلیکیشن است. به بیان ساده، API یک پیامرسان است که درخواستها را دریافت کرده و آنچه باید انجام شود را به یک سیستم منتقل میکند. سپس API پاسخ را به درخواست کننده باز میگرداند.
API درست مثل یک پیشخدمت رستوران عمل میکند. پیشخدمت سفارش را دریافت کرده و به آشپزخانه رستوران ارجاع میدهد. پس از آماده شدن سفارش، پیشخدمت آن را به مشتری تحویل میدهد. در مثالی دیگر، یک سایت فروشنده بلیت هواپیما برای دسترسی به اطلاعات بلیتهای ارائه شده توسط شرکتهای هواپیمایی مختلف، از API این شرکتها استفاده میکند. به نظر میرسد تعریف API با تعریفی که در ابتدای مطلب از وب سرویس ارائه شد، شباهت بسیاری دارد. بنابراین، در ادامه، به شرح تفاوت API و وب سرویس پرداخته شده است.
تفاوت API و وب سرویس چیست؟
وب سرویسها و APIها، دو اصطلاح رایج در فناوری هستند که با یکدیگر همپوشانی دارند و معمولاً در خصوص تفاوت آنها سردرگمی ایجاد میشود. حتی ممکن است گاهی این دو اصطلاح به جای هم به کار روند.
بنابراین، سوال اینجاست که این دو مفهوم با هم چه تفاوتی دارند؟ هم وب سرویسها و هم APIها ابزارهایی برای برقراری ارتباط هستند. در ادامه تفاوتهای API و وب سرویس فهرست شده است:
- یک وب سرویس تعامل میان دو ماشین را از طریق شبکه سهولت میبخشد، اما یک API به عنوان یک رابط میان دو اپلیکیشن عمل میکند تا آنها بتوانند با یکدیگر ارتباط برقرار کنند. یک وب سرور روی یک کامپیوتر اجرا میشود و به درخواستهای سایر کامپیوترها گوش فرا میدهد. در زمان دریافت یک درخواست از کامپیوتر دیگر، وب سرویس منابع درخواستی را بازمیگرداند. این درخواست میتواند شامل فایلهای HTML ،JSON ،XML تصاویر، صوت و سایر موارد باشد.
- یکی از تفاوتهای API و وب سرویس در نیاز به ارتباط شبکه است. APIها همیشه نیاز به شبکه ندارند و میتوانند آنلاین یا آفلاین باشند. این در حالی است که وب سرویسها برای کار کردن همواره نیاز به اتصال شبکه دارند.
- همه APIها لزوماً وب سرویس نییستند، اما تمامی وب سرویسها API به حساب میآیند.
- معماری APIها سبک وزن است و برای دستگاههایی (مثل دستگاههای تلفن هوشمند.) مناسب هستند که محدودیت پهنای باند دارند. وب سرویسها معمولاً از پروتکل SOAP برای ارسال و دریافت دادهها استفاده میکنند. بنابراین، اغلب معماری وب سرویسها چندان سبک وزن نیستند.
- APIها میتوانند هر نوع سبک ارتباطی داشته باشند، در حالی که وب سرویسها تنها دارای سه سبک هستند: وب سرویس SOAP، وب سرویس REST و وب سرویس XML-RPC
- به طور کلی، APIها اغلب متنباز هستند و کلاینتها میتوانند از طریق XML یا JSON با آنها ارتباط برقرار کنند. بسیاری از APIهای عمومی دارای مستندات باز و شفاف هستند. اما وب سرویسها معمولاً متنباز نیستند و کلاینتها در قالب XML با آنها ارتباط برقرار میکنند. وب سرویسها اغلب دادهها یا کارکردهای خاصی را به برخی خدمات گیرندگان خاص ارائه میدهند.
تا اینجا، تعریف جامعی از وب سرویس SOAP و سایر مباحث مرتبط با آن ارائه شد. در ادامه در قالب یک مثال، پیادهسازی وب سرویس SOAP در جاوا برای آشنایی با SOAP به صورت عملی انجام شده است.
وب سرویس SOAP در جاوا
در این بخش، به ارائه مثالی از وب سرویس SOAP در جاوا پرداخته شده است. یک مثال ساده (Hello World) که در Eclipse پیادهسازی خواهد شد. Eclipse امکانات (API) مطلوبی برای ایجاد وب سرویسها فراهم میکند. Eclipse بیشتر کارها را به صورت خودکار انجام میدهد و Endpointها (نقاط انتهایی)، Stubها، WSDL و سایر موارد را ایجاد میکند. در ادامه، هر یک از مراحل ایجاد وب سرویس SOAP در جاوا ارائه شده است.
مراحل ایجاد وب سرویس SOAP در جاوا
در مرحله اول باید یک پروژه وب پویا ایجاد و نامگذاری شود. میتوان مطابق تصویر زیر، نام آن را SimpleSOAPExample انتخاب کرد:
سپس، مطابق تصویر زیر، باید یک Package جدید با نام «org.arpit.javapostsforlearning.webservices» ایجاد شود.
در مرحله بعد، یک کلاس ساده جاوا با نام HelloWorld.java به صورت زیر ایجاد میشود:
در ادامه، وارد منوی Project شده و سپس باید در قسمت New روی گزینه Web Service راست کلیک کرد تا Wizard برای ایجاد وب سرویس مطابق تصویر زیر باز شود:
با کلیک روی گزینه Next به مرحله بعدی رفته و مطابق تصویر زیر، در قسمت «Service Implementation» باید نام کامل (Fully Qualified) کلاس HelloWorld که پیش از نوشته شده است را وارد کرده و هر دو اهرم مربوط به Test Service و Test Client را روی آخرین درجه قرار داد و در نهایت Finish را زد.
به این ترتیب، کار به اتمام رسیده است. مانند تصویر زیر، یک پروژه جدید با نام «SimpleSOAPExampleClient» در فضای کاری Eclipse ایجاد خواهد شد:
در پایان باید روی گزینه Start Server کلیک کرد. با این کار، Eclipse یک API تست وب سرویس را باز خواهد کرد. با استفاده از این API تست میتوان وب سرویس را آزمایش کرد.
به این ترتیب، مباحث مهم پیرامون وب سرویس SOAP به زبان ساده پوشش داده شدند. در بخش پایانی این مطلب، آن دسته از فیلمهای آموزشی پلتفرم آموزش آنلاین فرادرس معرفی شده است که بیشترین ارتباط را با مباحث مطرح شده در این مطلب دارند.
جمعبندی
در این مطلب به این سوال که «وب سرویس SOAP چیست» پاسخ داده شد. وب سرویس SOAP وب سرویسی است که از مشخصهها و قواعد یک وب سرویسSOAP پیروی میکند. این قواعد توسط یک سازمان مرکزی به نام W3C وضع شدهاند. مجموعه مشخصههای اساسی و پایه وب سرویس SOAP شامل WSDL ،SOAP و UDDI است. SOAP پروتکلی است که نحوه ارتباط دو وب اپلیکیشن با یکدیگر را تعیین میکند. SOAP بیان میدارد که برای ارتباط دو وب اپلیکیشن با یکدیگر، آنها باید از یک قالب مشترک یعنی XML استفاده کنند.
قالب XML باید از استاندارد پیام SOAP پیروی کند. پیام SOAP حاوی پاکت، سرآیند و بدنه است. پیامهای SOAP از طریق پروتکل HTTP در بستر وب انتقال داده میشوند. پیرامون مزایا و معایب وب سرویس SOAP بحث شد. وب سرویس REST و قواعد آن معرفی شد. تفاوت دو وب سرویس SOAP و REST مورد بحث قرار گرفت. در خصوص API و تفاوت آن با وب سرویس نیز توضیح داده شد. در پایان، مثالی ساده برای پیادهسازی وب سرویس SOAP در جاوا و همچنین معرفی دورههای آموزشی مرتبط ارائه شدند.
ممنون . عالی بود
ممنون از توضیحات شفاف و کامل شما
مطالب زیادی رو از سایتهای دیگه مطالعه کرده بودم ، اما هیچ کدام واضح و گویا نبودند
با سلام؛
خوشحالیم که مطالعه این مطلب برای شما مفید بوده است.
با تشکر از همراهی شما با مجله فرادرس
بسیار شیوا و ساده توضیح دادین ممنون، خیلی برام مفید بود
خیلی عالی , ساده و جامع توضیح داده شده. ممنون از مهندس عزیز
با سلام و احترام؛
صمیمانه از همراهی شما با مجله فرادرس و ارائه بازخورد سپاسگزاریم.
برای شما آرزوی سلامتی و موفقیت داریم.