تعداد بازدید: 17

Laravel API Introduction

پیاده سازی سرویسی (WebService API) جهت ارتباط وب اپلیکیشن با کلاینت هایی غیر از مرورگر با زبان عمومی JSON نیازمند پیروی از قوانین خاص می باشد.

هر لینک که به درخواستی از سرور منجر می شود به مثال یک جمله است که فعل آن Http Verb و فاعل آن فاعل آن authentication و مفعول آن Resrource می باشد.

همان طور که پیش تر گفتیم ارتباط کلاینت و سرور از طریق کنترلر انجام می پذیرفت . حال این که زمانی که کلاینت ما Browser بو ما کنترلر داشتیم و الان که کلاینت ما غیر از Browser می باشد نیز کلاینت ما مخصوص API می باشد. برای همین خاطر ما کنترلر های مرتبط با API را در دایرکتوری مجزا قرار می دهیم.

Api Controller

برای ساخت کنترلر برا API ما با اضافه کردن یک Api به مسیر و namespace کنترلر های ایجاد شده آن را مجزا می کنیم. دستوری که برای ساخت کنترلر برای API استفاده می کنیم به شکل زیر می باشد.

مثلا میخواهیم یک کنترلر به ازای Product برای اپلیکیشن بسازیم:

کنترلر ساخته شده در مسیر app/Http/Controller/Api/ProductController به شکل زیر می باشد.

در ادامه باید به سیستم بفهمانیم که برای اجرای درخواست های api از کنترلر های Api استفاده کند.

نکته : اگرچه کنترلر که رابط کلاینت و سرور می باشد در API متفاوت می باشد اما کل این کنترلر از تمامی امکانات نظیر model , event , queue , … استفاده می کند.

Http Request : درخواستی که باید به سمت کنترلر برای API ارسال می گردد باید هدر های مرتبط را داشته باشد تا سرور از روی آن تشخیص دهد و پاسخ را چه به ازای خطا و چه به ازای پاسخ به شکل اشیاء JSON برگرداند.

Http Response : اگر هدر های بالا در درخواست کاربر باشد و ما داده از نوع collection را برای کاربر بازگردانیم در آن سمت به صورت JSON کاربر خروجی های ما را دریافت می کند.

همچنین برای ارسال پیام می توانیم از شکل زیر استفاده کنیم :

با استفاده از تابع کمکی response می توان پاسخ هایی در قالب json برای کلاینت ارسال کرد. نمونه کامل یک کنترلر با دریافت و ارسال پاسخ برای کلاینت از نوع api را با Resource برابر Product را مرور کنید.

Route api

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

  • web : این مورد برای کلاینت WebBrowser استفاده می شود و دارای web middleware می باشد. این میان افزار وجود token را در درخواست ها بررسی می کرد.
  • api : این route میان افزار web را ندارد لذا نیازی به وجود token در بتن درخواست نمی باشد. روش های دیگری برای احراز هویت کاربران در این route وجود دارد که ما می توانیم از آن ها استفاده کنیم.

ما برای Route های مربوط به api نشانه namespace کنترلر مخصوص به خودشان را تعیین کرده ایم. در ابتدای هر Endpoint که برای api route می سازیم api به عنوان prefix داریم . به طور مثال وقتی که تعریف می کنیم :

لینک درخواست به شکل زیر می باشد :

مرحله دوم این است که به سیستم بفهمانیم که برای برای route api از کنترلر های Api استفاده کند. برای این کار باید routeServiceProvider را به شکل زیر تغییر دهیم.

همان طور که مشاهده می کنید دو متغیر با نام های WebNamespace و ApiNamespace ساخته ایم که هر یک را در متد های mapWebRoutes و mapApiRoutes استفاده کردیم که namespace های کنترلر های مورد استفاده برای api route , web route می باشد.

API Authentication

برای احراز هویت کاربر می توان از Middleware های مختلفی نظیر auth.basic یا استفاده از پکیج هایی نظیر JWT (Json Web Token) استفاده کرد.

auth.basic : برای استفاده از این روش کافی است که این میان افزار را به route هایی که نیاز است احراز هویت بکنیم بدهیم. این کار می تواند در متد سازنده کنترلر یا route به صورت مستقیم استفاده گردد.

این ساده ترین راه ممکن برای Authentication در API می باشد که به صورتی که کلاینت باید در هدر authorization مقدار encode شده username , password را بفرستد و لاراول هم احراز هویت را انجام می دهد و از آن جا تمامی Auth , auth() به درستی کار می کند. دقت داشته باشید که در این روش به ازای هر درخواست احراز هویت انجام می گردد. یعنی باید کلاینت در هدر Authorization مقدار را بفرستد.

JWT (Json Web Token) : یک پکیج برای احراز هویت (authentication) برای API هایی است که از پروتکل Http استفاده می کنند. نظیر Restfull . این کتابخانه برای فریم ورک Laravel نیز مستنداتی ارائه داده است.

ضمن پیاده سازی مراحل نصب این کتابخانه در لاراول باید به نکات زیر توجه داشت :

  • default gaurd را برای نرم افزار همان web در نظر بگیرید(config/auth.php) . در غیر این صورت سیستم authentication شما برای کلاینت مرورگر به مشکل می خورد.
  • در زمان ساخت AuthController باید زمانی که از تابع کمکی auth استفاده می کنید نوع middleware را به آن معرفی کنید تا کار کند. auth('api')
  • در استفاده از این کتابخانه برای api route برای endpoint ها یا همان عملگر هایی که می خواهید authentication انجام شود حتما از jwt.auth به عنوان middleware استفاده کنید تا policy ها کار کنند.
  • مواردی که گفته شد در پیاده سازی نسخه 1.0 آن روی لاراول 5.7 می باشد. توجه داشته باشید پس از نصب این کتابخانه را به نسخه "tymon/jwt-auth": "^1.0.0-rc.3" بروزرسانی کنید.

نحوه کار این کتابخانه به گونه ای است که کلاینت یک بار از طریق درخواست http://localhost:8000/api/auth/login و ارسال username , password از طریق Entity Body لاگین می کند و در نهایت سرور به کلاینت یک token می دهد که زمان خاصی قابل استفاده می باشد. پس از آن کاربر با ارسال این token به عنوان یک پارامتر از Entity Body یا url Parameter یا ارسال از طریق هدر Authorization خود را احراز هویت کند.

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

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای Laravel API Introduction

دیدگاهتان را بنویسید

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