آموزش ارتباط با سرور در برنامه نویسی iOS

فراخوانی از وب سرویس

اپ های موبایلی که امروزه توسط توسعه دهندگان و تیم های بزرگ توسعه داده می شوند همگی از فراخوانی وب سرویس استفاده می کنند و ما کمتر اپ هایی رو می بینیم که به صورت Local کار کنند. این موجب می شود که همه ی توسعه دهنده ها کار با وب سرویس و تجزیه اطلاعات ان را یاد بگیرند.

روش های گوناگونی برای ارتباط با سرور از وب سرویس وجود دارد که سعی می کنیم به طور کلی اون ها رو بررسی کنیم و یکی از رایج ترین ان ها را در یک مثال پیاده سازی کنیم.

URL Session در iOS

این روش ابتدایی ترین راه برای پیاده سازی درخواست برای ارتباط با سرور است که توسط خود اپل پیشنهاده داده و در داکیومنت ها به ان اشاره شده است. این روش به ما کمک می کند که بدون نصب کتابخانه کار خود را انجام دهیم و در کنار این مزیت که به ما می دهد امکان خطا را بالا می برد چرا که ما تمامی مراحل را بدون کمک انجام میدهیم و همینطور که  موجب بالا رفتن تعداد خط ها و در نتیجه پیچیدگی اپ می شود.

Alamofire در iOS

این کتابخانه رایج ترین کتابخانه برای درخواست وب سرویس برای ارتباط با سرور است که اکثر توسعه دهنده های iOS از ان استفاده می کنند. مزایای زیادی این کتابخانه دارد ولی مهمترین ان را می توان به سادگی استفاده از ان و همینطور راحتی کار با ان اشاره کرد به این صورت شما با تعداد خط کد کمتری وب سرویس را پیاده سازی می کنید. این کتابخانه توسط افراد زیادی به صورت متن باز ها پشتیبانی و توسعه داده می شود.

Moya در iOS

این کتابخانه در واقع یک Wrapper بر روی Alamofire است و کار اصلی ان ساختارمندتر کردن فراخوانی سرویس های موجود است که به شخصه فکر میکنم به شدت میزان کد را کاهش و تمیزی ان را بالا می برد ولی در کنار این ها به شما کمک می کند ساختاری اصولی تر را در پروژه های خود پیاده سازی کنید که این مهم ترین مزیت است.

نکته: کدی که در پایین مشاهده می کنید فقط بخش کوچکی از یک فراخوانی سرویس در این کتابخانه است تنظیم کردن Url و ساخت Provider خارج از این جا صورت گرفته و در صورت امتحان کردن این کد شما به خطا بر خواهید خورد.

RxSwift در iOS

این روش به کتابخانه ی خاصی مرتبط نیست در واقع می شود توسط سه روش بالا وب سرویس ها به صورت Rx فراخوانی کرد. این که Rx چی هست یک مبحثی کاملا متفاوت و خارج از مقاله ما هست. اما برای اشنایی بهتر بگیم که Rx یک سبک برنامه نویسی متفاوت تر از Functional Programming هست که الان ازش استفاده می کنند در واقع اسم کامل این سبک Reactive Programming است. نکته ی مهمتر این است که در این سبک همه چی یک جریان است که استفاده از ان نحوه پیاده سازی و اسکلت بندی اپ را به طور کلی تغییر می دهد و در مثال سعی می کنم یک نمونه کدی که Rx با Moya ترکیب شده را قرار بدهم.

در نگاه اول چنان تفاوتی با کد Moya به صورت خالی ندارد ولی اگر دقت کنید در خط دوم پسوند rx رو مشاهده می کنید و همینطور نحوه ی اتصال ان ها به المان های ظاهر کاملا متفاوت نسبت به حالت عادی است.

حالا ما یک پروژه ساده ساختیم که توسط Alamofire یک درخواست ساده ارسال و اطلاعات بازگشتی را نمایش می دهیم. ما از قبل سورس این برنامه را ساخته و در گیت هاب قرار دادیم و در ادامه ی اموزش شما نیاز دارید تا ان سورس را دانلود کرده و طبق ان پیش روید. از طریق این لینک می توانید اقدام به دانلود کنید.

شروع

ابتدا ما یک پروژه ساده را می سازیم. اولین کار بعد از ساختن پروژه نصب کتابخانه است که اگر با انجام این کار اشنایی ندارید می توانید این مقاله را مطالعه کنید. خب ابتدا برای اینکه پیچیدگی در کد بالا نرود ما تابع فراخوانی سرویس را در همان ViewController می نویسم. سه عدد لیبل از قبل به ان صفحه اضافه کردم که اطلاعات را در ان نمایش می دهم. کد فراخوانی سرویس به شکل زیر است.

خب در کد بالا ابتدا ما سعی می کنیم لینک را به نوع URL را تبدیل کنیم اگر خطا داد از تابع خارج و خطای مناسب را چاپ می کنیم. با همان لینک درخواست خود را از طریق Alamofire ارسال می کنیم و نوع پاسخ را جیسان تعریف می کنیم. از پاسخ احتمالی داده را در صورت موجود بودن استخراج می کنیم. و سپس توسط Decoder داده را به نوع مورد نظر خود تبدیل می کنیم که در ادامه توضیح خواهم داد. این کار ممکن است خطا ایجاد کند بخاطر همین از try استفاده می کنیم و در ادامه از ویژگی سویفت ۵ که Enum Result می باشد بهره می بریم که به ما دو حالت Success که در صورت درست بودن داده را به ما می دهد و ما داده ها رو در Text لیبل ها قرار می دهیم و نوع دیگری که ممکن است بر گرداند failure است که خطای احتمالی را نمایش می دهیم.

اما اطلاعاتی که سرویس به ما بر می گرداند یک Json با اطلاعات شخصی است.

بالا ما راجب به Decoder صحبت کردیم. این مبحث مربوط به این مقاله نمی شود ولی یک توضیح مختصر راجب به ان می دهیم. قبلا ما مجبور بودیم پاسخ سرور را به صورت دستی تجزیه کنیم ولی الان با کمک Codable دیگر نیازی به این کار نیست و این عمل به صورت خودکار انجام می شود. استفاده از Codable به شکل زیر است که ابتدا در Struct مورد نظر باید به ان Confirm کند.

خب این هم از پایان مقاله درباره ی انواع روش هایی فراخوانی وب سرویس صحبت کردیم و یک سرویس ساده رو جهت اشنایی پیاده سازی کردیم و در پایان پس از اجرای پروژه شما باید این تصویر را مشاهده کنید.

فراخوانی از وب سرویس

منتظر دیدن نظرات و پیشنهاد شما خوانندگان عزیز در بخش نظرات هستم.

مهدی محجوبی
توسعه دهنده iOS
دیدگاه ها

دیدگاه کاربران تعداد دیدگاه = 4

  1. Avatar

    سلام
    سپاس از آموزش هاتون
    چه جوری میشه سطح دسترسی کاربر ها رو تو برنامه مشخص کرد مثل وردپرس؟ کاربر طلایی، نقره ای، برنزی و معمولی؟

    • مهدی محجوبی

      سلام
      ممنون میشم دقیق تر توضیح بدید من متوجه نشدام ولی اگه منظور شما پیاده سازی یک سیستم لاگین هست که یک پروسه بسیار طولانی و با توجه به نیاز سیستم طراحی می شود.
      موفق باشید.

  2. Avatar

    سلام دوباره
    مثلا دو دسته کاربر وارد میشن داخل اپ یکی معمولی که امکانات کمتری داره یکی کاربر اشتراکی که از امکانات بیشتری برخورداره که دسته دوم باز
    یه زیر مجموعه داره میشه مثل طلایی، نقره ای، برنزی

    از سیستم لاگین جلوتر کاربر ثبت نام کرده اشتراک ماهانه مثل سیب اپ یا برنامه های کیف پول و…

    • مهدی محجوبی

      با سلام
      برای این منظور شما می توانید روش های متفاوتی رو استفاده کنید و یکی از راحت ترین ها اینه که شما یک Singleton بسازید برای اطلاعات کاربر وقتی که لاگین شد اطلاعات رو روی او ذخیره کنید که کل اپ بدون alloc کردن شی کاربر به او دسترسی داشته باشند و برای راحت تر شدن می توانید برای وضعیت کاربر از یک Enum استفاده کنید که اپشن های زیادی توی سویفت دارد.
      موفق باشید.

ارسال دیدگاه

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

صفحه اینستاگرام کانال تلگرام