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

ساخت REST API با PHP

API (Application Program Interface) یعنی یک واسط برای استفاده از امکانات نرم افزار. واسط های گرافیکی نرم افزار رو هم می تونیم API نام ببریم ، همچنین سرویس هایی نظیر REST , CURL , SOAP نیز برای استفاده از نرم افزار وجود دارد.

موارد گفته شده می توانند دسترسی یک نرم افزار خارجی را به تمام یا بخشی از نرم افزار ممکن سازند. ما API های زیادی در بستر های مختلفی می تونیم داشته باشیم ، در اینجا ما API ها رو در بستر وب بررسی می کنیم.

RESTfull API

REST (Representational State Transfer) یک معماری ساخت API می باشد که از پروتکل Http استفاده می کند. روال کار آن به صورتی است که یک قالب درخواست (Http Request Structured)  به سمت سرور می فرستد و یک قالب پاسخ (Http Response Structured) به سمت کلاینت ارسال می کند.

زمانی که شما در حال ساخت REST API برای یک نرم افزار هستید می توان گفت که شما سرور هستید و زمانی که دارید از یک REST API استفاده می کنید (مثلا زمان ساخت یک اپلیکیشن) می توان گفت که شما کلاینت هستید.

حال کلاینت میتونه هر وسیله ای که شما ازش برای ارسال درخواست استفاده بکنید نظیر فرم های HTML یا CURL یا نرم افزاهایی نظیر Postman , .IOS Device , Android Device

برای ارتباط داده ای میان دو نرم افزار ما از زبان مشترک استفاده JSON استفاده می کنیم. پس داده ها را در سرور برای پاسخ از فرمت محلی بوسیله تابع به فرمت JSON تبدیل می کنیم (Encode) و همچنین در کلاینت پس از دریافت آن ها را از فرمت JSON به فرمت محلی تبدیل می کنیم (Decode).

Server Objects – Resource

در REST ما با Resource ها سر و کار داریم . یعنی عملیات های CRUD را روی Resource انجام می دهیم. بنا به هر یک از عملیات ها ما Http Method متفاوت همچنین Header های متفاوتی خواهیم داشت.

Rest api dealing with resources

معمولا هر عملگر ها در api دارای یک لینک می باشند . به طور مثال برای ساخت REST به ازای یک Resource مثلا Post به ازای چهار عملیات Create , Read , Update , Delete روی Post در یک وبلاگ لینک های زیر را می سازیم(نام Resource را در لینک مشاهده می کنید)

  • api/posts/all.php
  • api/posts/create.php
  • api/posts/single.php
  • api/posts/update.php
  • api/posts/delete.php

کلاینت می تواند با ارسال درخواست معتبر به سرور به پست ها دسترسی پیدا کند و همچنین پست جدید ایجاد کند و یا یک پست را حذف یا بروزرسانی کند (دریافت داده و ارسال داده).

قالب لینک های بالا به صورت تست می باشند و در نرم افزار هایی که از معماری های نوین MVC , HMVC استفاده می کنند ساختار را بر اساس همان قوانین باید پیاده سازی کرد.

HTTP Request methods

HTTP متدهای مختلفی تعریف کرده تا به سرور بفهماند به ازای هر متد کدام فعل را باید روی Resrource پیاده سازی کند. گاها به request methods ها Http Verb هم می گوییم یعنی افعال Http .

  • GET : The GET method requests a representation of the specified resource. Requests using GET should only retrieve data.
  • HEAD : The HEAD method asks for a response identical to that of a GET request, but without the response body.
  • POST : The POST method is used to submit an entity to the specified resource, often causing a change in state or side effects on the server.
  • PUT : The PUT method replaces all current representations of the target resource with the request payload.
  • DELETE : The DELETE method deletes the specified resource.
  • PATCH : The PATCH method is used to apply partial modifications to a resource.

ما در هدر Response می توانیم تعیین کنیم که این API چه متدی را می تواند قبول کند.

Read Resource – GET

عملیات Read یا خواندن از پایگاه داده به ازای یک متد از مدل که می تواند بخشی از Resources را برگرداند. محتوای کد زیر بنا به نوع نرم افزار می تواند یک متد یا یک فایل باشد.

خروجی کد بالا یک شئ JSON خواهد بود که در سمت کلاینت می تواند استفاده شود. در این api ما تمامی پست های موجود را با استفاده از مدل Post بر می گردانیم.

هدر هایی که ما برای این فعل در سرور استفاده کردیم (Response Http) :

  • Access-Control-Allow-Origin : یعنی از چه نواحی قادر به ارسال درخواست به این api می باشند. شما می توانید لینک خاصی را قرار دهید اما در این قسمت ما تمامی نواحی را قرار دادیم ( * ).
  • Content-Type : نوع فرمت خروجی که این api برای کلاینت ارسال می کند.

نکته : یک api خوب حتما باید تمامی نکات را در نظر بگیرد. به طور مثال اگر پاسخ را در قالب JSON می فرستد باید به header Request توجه کند که آیا این درخواست Accept آن appication/json را قبول می کند یا خیر.

نکته : زمانی که دارید Request ارسال می کنید باید توجه داشت که دو هدر Content-Type و Accept را قرار بدهید . چون برخی api ها این دو هدر را مورد بررسی قرار می دهند.

Create Resource – POST

عملیات افزودن resource یا فعل POST یا عملگر Create مثل یک تابع تعبیه شده برای کلاینت است که باید از کانال REST api به پایگاه داده تزریق گردد. در این نوع باید از سمت کلاینت به سمت سرور داده ارسال گردد و در سمت سرور پس از پردازش از آن ها استفاده کنند.

دریافت داده ها از کلاینت در سرور بوسیله تابع file_get_contents انجام می پذیرد (خط ۹).

تابع json_decod داده های ارسالی با فرمت JSON را به فرمت محلی تبدیل می کند. پارامتر این تابع :

  • json : پارامتر اول این تابع یک رشته json می باشد.
  • assoc : پارامتر دوم این تابع مشخص می کند که خروجی را به صورت آرایه برگرداند یا شئ.

تابع json_encode داده ها را از فرمت محلی به فرمت JSON تبدیل می کند. پارامتر این تابع :

  • value : مقدار محلی با فرمت های مجاز این تابع نظیر Object , Array , …

توضیح Header ها در این عملگر :

  • Access-Control-Allow-Method : این هدر مشخص می کند که بوسیله چه HTTP Method به این api درخواست بزنیم که در این مثال POST می باشد و در غیر اینصورت سرور خطای 400 یا همان Bad Request می دهد.
  • Access-Control-Allow-Headers : هدر های مجاز قابل استفاده در Response.

Update Resource – PUT

بروزرسانی یک Resource یعنی تغییر اطلاعات کلی Resource که در مثال ما post می باشد. در کد های زیر می توانید ببینید به ازای کل پارامتر ها جایگزینی اتفاق افتاده که باید از فعل PUT استفاده کنیم.

در این api هنگام ارسال درخواست از سمت client باید یک row از جنس JSON بفرستیم که در آن id پست مورد نظر باشد به همراه پارامتر های آن .

Delete Resource – DELETE

حذف Resource یا فعل DELETE جهت حذف یک post از داخل پایگاه داده .

Authetication in RESTfull API

ممکن است در برخی عملگر های REST مبتنی بر authentication یا احراز هویت باشد. برای authenticate کردن کاربر از یک token استفاده می کنیم که دلیل بر authenticate می باشد. این token می تواند ترکیب encode شده ای از username , password کاربر باشد و یا توسط سیستم یا کتابخانه مورد نظر ساخته شده باشد. این کار با روش های مختلف قابل پیاده سازی می باشد:

  • ارسال token با استفاده از Request Header با نام Authentication
  • ارسال token به عنوان uri parameter

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

با استفاده از WWW-Authenticate نوع الگوریتم برای authentication را تعیین کردیم . در سمت کلاینت هم با استفاده از هدر Authorization مقادیر username , password را با استفاده از همین الگوریتم Basic با base64 به شکل encode در آوردیم و فرستادیم:

این روش از امنیت پایینی برخوردار است. توصیه می شود برای پیاده سازی سیستم Authentication در نرم افزار خود از کتابخانه های امن تر استفاده کنید.

 

مطالب مشابه

کار با gdLibrary در php

کتابخانه gd برای کار بار تصاویر به صورت پویا در زبان های برنامه نویسی نظیر PHP می باشد که توسط زبان C نوشته شده است....

php error handling exceptions

مدیریت خطا و استثنا در php

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

آرایه ها در php

در این مقاله قصد داریم تا آرایه ها رو در php بررسی کنیم و همچنین توابع مرتبط با آرایه ها رو بررسی کنیم. انواع آرایه در...

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

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

2 دیدگاه برای ساخت REST API با PHP

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

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