وب سرویس چیست؟
در این مبحث ابتدا به معرفی وب سرویس و کاربردهای آن پرداخته سپس معماری REST را شرح میدهم.
وب سرویس چیست؟
بهنام خدا. وب سرویس، استانداردی است برای انتقال داده بین پلتفرمها / ماشینها / نرم افزارهای مختلف (عموما بین سرویس دهنده و سرویس گیرنده یا همان سرور و کلاینت). این استاندارد در محیط های مختلف یکسان است و فارغ از نوع سخت افزار یا سیستم عامل یا زبان برنامه نویسی بکار رفته در نرم افزار مبدا و مقصد، به راحتی میتوان داده ها را ارسال و دریافت کرد بطوری که این داده ها برای هردو طرف قابل فهم باشد. همانطور که از نام این استاندارد پیداست، وب سرویسها تحت وب قابل دسترسی هستند و انتقال داده ها از طریق پروتکلهای استانداردی مانند HTTP صورت میپذیرد.
امروزه وب سرویسها کاربرد فراوانی دارند. بخش زیادی از مردم از وب سرویسها استفاده میکنند در حالی که خودشان متوجه این استفاده نمیشوند، به این دلیل که وب سرویسها در پشت صحنه کار میکنند.
مثالهای متعددی برای موارد کاربرد وب سرویس میتوان ذکر کرد. یک فروشگاه اینترنتی را درنظر بگیرید. کاربر با مراجعه به وب سایت فروشگاه، به لیست محصولاتی که روی سرور این سایت قرار گرفته دسترسی دارد و میتواند جزئیات محصولات از جمله نام کالا، قیمت، رنگ و اندازه را مشاهده نماید. این اطلاعات در یک دیتابیس بر روی سرور ذخیره شده است. حالا مدیر این فروشگاه آنلاین قصد دارد یک اپلیکیشن نیز در اختیار کاربران قرار دهد تا کاربر بدون نیاز به مراجعه به وب سایت و تنها با نصب برنامه روی تلفن هوشمند یا تبلت خود بتواند به لیست محصولات موجود در سایت دسترسی داشته و در صورت نیاز، یک محصول را به صورت آنلاین خریداری کند. مسلما نمیتوان لیست و جزئیات محصولات را به صورت لوکال (محلی) بر روی دیتابیس داخلی اپلیکیشن وارد کرد زیرا داده های مرتبط با محصولات دائما در حال تغییر هستند. هر روز تعدادی محصول جدید اضافه میشود، تعدادی محصول حذف میشود، قیمتها مرتبا در حال تغییر هستند و… که اگر مدیر فروشگاه بخواهد تمام این تغییرات را درون دیتابیس داخلی اپلیکیشن اعمال کند، لازم است در هر روز چندین بار نسخه جدیدی از اپ فروشگاه را منتشر کند و کاربر هم مجبور است دائما در حال بروزرسانی و دانلود و نصب نسخههای جدید نرم افزار باشد که عملا این کار غیر ممکن و طاقت فرساست؛ هم برای سازنده اپلیکیشن و هم کاربر. علاوه بر اشکالات قبل، در صورت ثبت اطلاعات محصولات در دیتابیس داخلی اپلیکیشن، حجم دیتابیس و در نهایت حجم اپ شدیدا افزایش یافته و برای فروشگاههای بزرگ ممکن است به چند صد مگابایت یا چندین گیگابایت برسد! پس راه حل منطقی دریافت اطلاعات محصولات موردنظر کاربر به صورت آنلاین از سرور است. در اینجا وب سرویس به کمک مدیر فروشگاه میآید. با استفاده از وب سرویس به راحتی میتوان اپلیکیشن را به سرور و دیتابیس وب سایت فروشگاه متصل کرد بدون آنکه نیاز به استفاده از سرور مجزا و مخصوصی باشد. یعنی مهم نیست سیستم عاملِ سرورِ این وب سایت، ویندوز است یا لینوکس، وب سایت با زبان PHP نوشته شده یا ASP، دیتابیس از نوع MySQL است یا Oracle یا SQL Server. هیچ محدودیتی نیست. در طرف کلاینت یا سرویس گیرنده نیز همینطور. یعنی مهم نیست دیوایس کاربر Android باشد یا iOS یا Windows؛ اپلیکیشن با زبان java نوشته شده یا kotlin یا swift یا C++. به هر روشی که سرور و کلاینت پیاده سازی شده باشند، امکان استفاده از وب سرویس یا به عبارتی API ها فراهم است. بنابراین یک فروشگاه آنلاین به راحتی میتواند کاربران دارای دیوایسهای Android ، iOS ، Windows ، BlackBerry و… را بطور همزمان و بدون نیاز به بکارگیری سخت افزار و یا نرم افزار مجزا برای هرکدام از این محیطهای کاربری، پوشش دهد. فرمتی که داده ها از سمت سرور ارسال میشود برای اپلیکیشن اندروید و اپلیکیشن ویندوز و سایر سیستم عاملها یکسان است و هیچ تفاوتی نمیکند.
نکته دیگر اینکه در وب سرویس فقط داده ها ارسال میشوند و جزئیات و عناصر رابط کاربری، نحوه چیدمان اجزاء، رنگها و… ارتباطی به وب سرویس ندارد.
تصویر فوق مربوط به یک اپلیکیشن فروش آنلاین است. ابتدا کاربر دسته بندی محصول مدنظر خود را تعیین میکند. سپس این دسته بندی توسط وب سرویس از سرور وب سایت فروشگاه دریافت و در محیط اپلیکیشن برای کاربر نمایش داده میشود. نام لپ تاپ، توضیحات، قیمت و آدرس (Url) تصویر مربوط به هر لپ تاپ، مواردی هستند که توسط وب سرویس به کلاینت یا همان دیوایس کاربر ارسال گردیده است. مابقی اجزائی که در صفحه مشاهده میکنید مربوط به خود اپلیکیشن هستند و از سرور گرفته نشده است.
سامانههای پیامکی مثال دیگری از کاربرد وب سرویسها هستند. از این سامانه ها جهت ارسال پیامک از طریق یک پنل مدیریتی تحت وب استفاده میشود و نیازی به سیمکارت و گوشی نیست. مالک سامانه میتواند به سادگی و از طریق پنل مدیریت تحت وب سامانه خود که آنرا از یک شرکت خریداری نموده، اقدام به ارسال پیامک به شمارههای مختلف نماید.
اما این سامانه ها امکان دیگری نیز در اختیار مالک سامانه قرار میدهند. یکی از این امکانات API (مخفف عبارت Application Programming Interface) یا همان وب سرویس است که به کاربر اجازه میدهد بدون نیاز به ورود به پنل مدیریتی سامانه (از طریق مرورگر) و بطور خودکار، پیامک ارسال کند. به عنوان مثال یک فروشگاه آنلاین درنظر دارد بعد از هر ثبت سفارش خرید کالا توسط مشتری، کد رهگیری برای وی در قالب پیامک ارسال شود. اینجا نیاز به ارسال دستی پیامک توسط کارمندان فروشگاه نیست بلکه تنها کافیست سیستم فروشگاه آنلاین به یک سامانه پیامکی که API ارائه میدهد متصل شود تا بعد از هر ثبت سفارش توسط مشتریان، یک درخواست ارسال پیامک به سامانه ارسال گردد. این درخواست شامل متن پیامک و شماره گیرنده است. در اینجا مهم نیست سرور فروشگاه لینوکسی است یا ویندوزی یا سیستم فروشگاه با چه زبانی نوشته شده. سامانه تنها یک درخواست با فرمت استاندارد را میپذیرد که شامل متن پیام و شماره مقصد است و اینکه این درخواست از سمت چه سروری و چه سیستمی ارسال شده تفاوتی نمیکند.
وبسایت های نمایش وضعیت آب و هوا نیز معمولا API در اختیار افراد قرار میدهند (این API میتواند رایگان و یا مشمول هزینه باشد). استفاده از این سرویس بسیار گسترده است. به عنوان مثال مدیر یک وب سایت یا یک اپلیکیشن میتواند با استفاده از این API، آب و هوای مربوط به شهرهای مختلف را درون وب سایت یا اپ خود نمایش دهد بدون اینکه لازم باشد شخصا اطلاعات وضعیت آب و هوای تک تک شهرها و کشورها را جمع آوری کند. کافیست از طرف وب سایت یا اپ مربوطه، نام شهر یا مختصات جغرافیایی آن از طریق وب سرویس به سرور وب سایت اصلی ارسال گردد تا در کمترین زمان ممکن پاسخ به سمت کلاینت ارسال گردد.
AccuWeather.com یکی از معروفترین سرویسهای ارائه اطلاعات آب و هوایی جهان است.
در انتهای وبسایت، گزینه ای با نام AccuWeather APIs قرار دارد که با کلیک روی آن به قسمتی با نام Developer منتقل میشویم. همانطور که از نام آن پیداست، این امکانات ویژه توسعه دهندگان است. سپس به جدولی میرسیم که هزینه دسترسی به API را در پلنهای مختلف نمایش میدهد. به عنوان مثال برای ۵۰ درخواست در روز، هزینه ای دریافت نمیشود و استفاده از آن رایگان است. یعنی توسعه دهنده میتواند با استفاده از این وب سرویس، به تعداد ۵۰ بار در روز، وضعیت آب و هوایی شهرهای مختلف را در اپلیکیشن یا وبسایت خود نمایش دهد؛ بدون پرداخت هزینه. اما برای استفادههای بالاتر باید هزینه متناسب با آن را پرداخت کرد.
سیستمهای رزرو بلیت را به عنوان آخرین مثال از کاربردهای وب سرویس بررسی میکنم. مطمئنا اپلیکیشنها و یا وبسایتهای متعددی را در ذهن دارید که خدمات رزرو و خرید انواع بلیتهای هواپیما، قطار و اتوبوس ارائه میدهند. شاید این سوال در ذهن شما بوجود آمده که آیا همه این سرویس دهندهها به صورت جداگانه با چند صد شرکت مربوط به حمل و نقل هوایی، ریلی و جاده ای قرارداد بسته اند؟ پاسخ منفی است! تعداد سرویس دهنده هایی که به صورت مستقیم با شرکتهای مسافربری قرارداد امضا کرده و در تعامل هستند، کمتر از انگشتان یک دست است. مابقی ارائه دهندگان خدمات خرید بلیت در قالب دریافت نمایندگی از بستر این شرکتها استفاده میکنند. به اینصورت که با استفاده از API یی که شرکت مادر در اختیار سرویس دهندگان زیرمجموعه خود قرار میدهد، میتوانند در اپلیکیشن یا وبسایت خود بدون اینکه نامی از شرکت مادر باشد، اقدام به فروش بلیت نموده و کسب درآمد کنند. در واقع این سرویسها تنها یک واسط بین شرکت مادر (طرف قرارداد با شرکتهای مسافربری) و مشتری نهایی هستند و از هر خریدی که توسط اپلیکیشن یا وبسایت آنها انجام میشود، پورسانتی از شرکت مادر دریافت میکنند.
مثالهای پراکنده و گسترده ای را مطرح کردم تا دید شما نسبت به کاربرد وب سرویسها کاملا باز شود. اما کاربرد وب سرویس میتواند برخلاف موارد فوق، محدود و بسیار ساده باشد. فرض کنید میخواهیم اپلیکیشنی بسازیم که افراد از طریق آن بتوانند از خدمات کارواش در محل بهرهمند شوند. ساده ترین حالت برای پیاده سازی این اپ به اینصورت است که کاربر پس از نصب برنامه روی دیوایس اندرویدی خود ابتدا فرم ثبت نام را تکمیل کرده و سپس با ذکر آدرس محل سکونت یا مشخص کردن آن روی نقشه، درخواست ارسال کارواش سیار نماید. در این مثال، داده هایی که بین دیوایس (کلاینت) و سرور رد و بدل میشود مربوط به مشخصات فردی شخص و محل درخواست کارواش است. این سرور را خود توسعه دهنده میتواند با پرداخت هزینه اندکی راه اندازی نماید و و مانند مثالهای قبل، سرویس دهنده واسطی درکار نیست تا بتوانیم از API آن استفاده کنیم. بنابراین راه اندازی وب سرویس به عهده خود ماست.
در نهایت اگر بخواهیم تفاوت یک Web Service را با یک Web Page (صفحات وب) بررسی کنیم، در Web Page که کاربر توسط یک مرورگر آنرا مشاهده میکند، تمامی اجزای صفحه ازجمله متن، تصاویر، رنگها، چینش عناصر و… همگی از سمت سرور و با فرمت Html دریافت میشوند اما در Web Service تنها محتوای اصلی از سرور دریافت شده و در چارچوبی که درون اپلیکیشن برای نمایش محتوا از قبل طراحی شده، به کاربر نمایش داده میشود. بطور خلاصه در یک صفحه وب، قالب (رابط کاربری) نیز از طرف سرور دریافت میشود اما در اپلیکیشنی که از وب سرویس استفاده میکند، رابط کاربری درون اپلیکیشن قرار گرفته و تنها محتوا است که توسط وب سرویس دریافت شده و درون این رابط کاربری قرار میگیرد.
وب سرویس RESTful:
در حال حاضر دو وب سرویس SOAP (مخفف Simple Object Access Protocol) و REST (مخفف Representational State Transfer) بیشترین کاربرد را در بین توسعه دهندگان دارند. اخیرا و با توجه به سادگی در پیاده سازی وب سرویس REST، این گزینه طرفداران بیشتری به خود جذب کرده است. البته یک تفاوت اساسی بین این دو وجود دارد. SOAP یک پروتکل بوده درحالی که REST یک سبک معماری وب سرویس است که از طریق پروتکل HTTP داده ها را ارسال و دریافت میکند.
در اندروید نیز از معماری REST استفاده میکنیم. وب سرویسهایی که توسط معماری REST پیاده سازی میشوند را RESTful مینامند.
در ابتدای مبحث راجع به فرمت انتقال داده در وب سرویس صحبت شد و اینکه این فرمت در همه پلتفرمها و زبانهای رایج برنامه نویسی پشتیبانی میشود. SOAP تنها از فرمت XML برای انتقال داده استفاده میکند درحالی که در وب سرویسهای RESTful از سایر فرمتها مانند HTML و JSON نیز پشتیبانی میشود که در این بین، فرمت JSON به علت مصرف کمتر پهنای باند، سرعت بیشتری نسبت به سایر گزینهها دارد. نتیجه آن است که در اندروید نیز از فرمت JSON برای ارتباط بین سرور و کلاینت استفاده میشود. ارسال و دریافت اطلاعات توسط متدهایی مانند GET، POST، PUT و DELETE برای عملیاتهایی مانند دریافت، ارسال، ویرایش، حذف و… انجام میگردد.
مانند سایر قسمتهای اندروید، در مبحث وب سرویس و اتصال اپلیکیشن به سرور نیز کتابخانههای متعددی منتشر شده و نیاز ما به درگیر شدن با مفاهیم و مسائل فنی و پیچیدهی پیاده سازی وب سرویسها را مرتفع میسازد. در حال حاضر دو کتابخانه Retrofit و Volley در بین توسعه دهندگان اندروید بیشترین کاربرد را دارند. کتابخانه Retrofit توسط شرکت Square و کتابخانه Volley توسط Google منتشر شده و پشتیبانی میشوند. در مبحث بعد به بررسی و نحوه کار با کتابخانه Retrofit خواهیم پرداخت.
تعداد صفحات : ۹
حجم : ۱ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۱ مگابایت لینک کمکی
لینک های دانلود کار نمیکنند خطای ۴۰۴ میده
سرور دانلود یه ۱ ساعتی مشکل داشت که حل شد. ضمنا لینک دانلود کمکی برای همین مواقعه
سلام، خیلی عالی بود، همیشه موفق باشید
سلام ممنون از زحماتتون میشه لطفا بگید که برای ساخت وب سرویس حتما باید php یاد بگیریم و اگر جواب بله هست از کجا باید شروع کنم دوره ای هست که مناسب این کار باشه و بتونید معرفی کنید ممنون میشم اگر پاسخ بدید
زبان های سمت سرور زیاد هستن و محدود به PHP نیست. جستجو بکنید در این زمینه ببینید چه زبانی مناسب شما هست
خدا خیرتان بدهد ، ان شا الله همیشه موفق و موید باشین
عالی بود
ممنونم خیلی مفید بود
سلام استاد
جسارتا معمایی restful همان ارتباط اندروید با سرور است یا چیزی فراتر ؟
RESTFul منحصر به اندروید نیست. در کل همون نحوه ارتباط کلاینت با سرور و جابجایی اطلاعات هستش
سلام استفاده کردم. بسیار مفید بود. ممنونم
این چیه گذاشتی یه سایت آموزشی میزنی کد هاشو بذار که وقا ماهم تلف نشه
توصیه میکنم یه کلاس درک زبان فارسی برید حتما
سلام لطفا پاسخ بدید
من میخوام یه برنامه بسازم که صفحات یک وبسایت رو داخل برنامه نمایش بده.
عنوان های مربوط به هر مطلب رو از وبسایت دریافت کنه و در قالب لیست ویو نمایش بده. در نهایت وقتی ما روی هر کدوم کلیک کردیم پیج یا مطلب مربوطه داخل برنامه نمایش داده بشه.
لطفا راهنمایی بفرمایید.
این مورد رو برای CMS ای که سایت ازش استفاده میکنه سرچ بکنید اطلاعات بیشتری بدست میارید
به نام خدا
باسلام
بنده میخوام یه برنامه بسازم که یک سری مقاله رو به همراه تصویر از وبسایت مربوطه دریافت کرده و داخل اپلیکیشن در قالب لیست ویو دسته بندی و نمایش بده.
آیا برای انجام این کار مطالعه همین بخش وب سرویس ها برای من کافیه؟
و یا اگه کافی نیست لطفا آموزشی در این زمینه رو برای من بفرستید
با تشکر از لطف شما
خیر صرفا وب سرویس کافی نیست. دقیقا نمیشه مشخص کرد چی لازمه. بستگی داره سایت با چه CMS یی راه اندازی شده باشه
سلام ببخشید من دقیق متوجه نشدم الان برای یک اپلیکیشن فروشگاهی حتما باید وب سایت هم راه اندازی کنیم؟
ممنون از آموزش ها و پاسخ های خوبتون
خیر الزامی نیست
عالی عالی عالی. خیلی ممنون
عالی بود خیلی ممنون
سلام
ممنون بایت اموزشهای خوبتون.
میخواستم ببینم چه سرویسی الان جایگزین firebase هست؟من بیشتر استفاده از دیتابیس و storage مطرح هست ،میخواستم ببینم سرویسی مشابه فایربیس که این کار رو انجام بده چی میتونه باشه؟
سلام. بنده اطلاعات زیادی در این خصوص ندارم. firebase alternatives رو سرچ بفرمایید مقالات متعددی هست که سرویسهای جایگزین رو معرفی و مقایسه کردن
چقد عالی توضیح دادید..ممنون
استفاده کردم
ممنون از وقتی که گذاشتین
سلام واقعا قدرت آموزش بسیار بالایی دارید. خیلی ممنونم لطفا همینطور با قدرت ادامه دهید
دستتون درد نکنه
با سلام و عرض ادب ، خسته نباشید
لطفا هرچه سریع تر ادامه این آموزش رو قرار بدید
متشکرم…
سلام دستتون درد نکنه سایت خیلی خوبی دارین آموزشهاتونم خیلی ساده و حرفه ای هست.
سلام لطفا سریع تر بخش اموزش را بگذاریدذ بسیار مشتاق هستیم
سلام
لطفاً بخش آموزش های پایه رو به روز کنید
بیشترش مطالب با اندروید استودیو جدید سازگار نیست
محیط اندروید استودیو مرتب در حال تغییر هست و برای هر مورد جزئی نمیشه کل مطالب رو بروز کرد. اما هر وقت فرصتی میشه به ترتیب اولویت یکی از آموزشها رو بروز میکنم. موارد جزئی در اصل آموزش خللی ایجاد نمیکنه و با یه سرچ کوچیک به جواب میرسید.