ساخت Rest API برای اندروید با استفاده از PHP ، MySql و Slim – قسمت اول

با نام خدا و سلام، تو این آموزش در مورد ساخت Web API برای اندروید با استفاده از Rest حرف خواهم زد.

 

تو این آموزش دانش کافی در مورد ساختن یه REST API برای مبتدیان داده خواهد شد. در ابتدا با مفهوم خود REST آشنا میشیم و در ادامش به کد نویسی PHP و… خواهیم پرداخت.

1- آشنایی با طراحی REST API

وب سرویس RESTful یا Representational state transfer (REST) یکی از راه های فراهم کردن همکاری و ارتباط بین سیستم های کامپیوتری بر بستر اینترنت می باشد. معماری REST برای ساخت اپلیکیشن های شبکه client/server مناسب می باشد. اجرا کردن REST در مقایسه با دیگر روش ها مانند SOAP، CORBA, WSDL و … بسیار ساده می باشد و به طور اساسی روی پروتکل HTTP کار می کند.

 

در ادامه لیستی از مواردی که باید در زمان ساخت یک REST api در نظر گرفته بشه آورده شده:

HTTP Methods : 

یک RESTful API  که به خوبی طراحی شده باشه از اکثر متود های HTTP پشتیبانی می کند (GET, POST, PUT and DELETE). متودهای دیگری از HTTP مانند OPTIONS, HEAD نیز وجود داره، اما موارد قبلی بیشترین استفاده را دارند. هر متود با توجه به توع عملی که قصد انجحام دادنش رو داریم استفاده میشه:

GET To fetch a resource
POST To create a new resource
PUT To update existing resource
DELETE To delete a resource

HTTP Status Code:

کدهای وضعیت HTTP  در بدنه ی response به اپلیکیشن کلاینت می گند که چه عملی با این response باید انجام شود. برای مثال اگر کد response شماره 200 باشد، به این معنی است که در سمت سرور درخواست با موفقیت انجام شده است و در response میتوان انتظار داده بروز شده را داشت. به همچنین اگر کد وضعیت 401 باشد یعنی درخواست جواز دریافت نکرده یه مثال برای 401 میتونه نامعتبر بودن api key  باشه.
لازم نیست که از همه یکدهای وضعیت http پشتیبانی بشه، اما حداقل پشتیبانی از کد های ذیل به اندازه کافی خوب خواهد بود. میتونید لیستی از http code ها را در این لینک و این یکی ببینید.

200 OK
201 Created
304 Not Modified
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
422 Unprocessable Entity
500 Internal Server Error

 

URL Structure:

در طراحی REST، نقاط پایانی URL یا (URL endpoints) باید به خوبی شکل داده شده باشند و باید به آسانی قابل فهم باشند. هر URL برای یک response باید به صورت منحصر بفرد شناخته شده باشد. اگر API مورد نظرتون برای دسترسی نیاز به API Key داشته باشد، api key باید به جای قرارگرفتن در URL در Http Headers قرار بگیرند.

 

برای مثال:  

GET http://abc.com/v1/tasks/11 – مشخصات task با id  به شماره 11 رو میده.

POST http://abc.com/v1/tasks –  یه task جدید می سازد.

API Versioning:

مقالات زیادی در مورد ورژن گذاری API ها وجود دارد که api version در URL در نظر گرفته شود یا در Http headers درخواست مورد نظر. اگرچه توصیه می شود که ورژن باید درون headers های درخواست گذاشته شوند.

مثال:
http://abc.com/v1/tasks
http://abc.com/v2/tasks

Content Type: 

content type درون HTTp Headers نوع داده ای که باید بین سرور و کلاینت انتقال داده شود را مشخص می کند. متناسب با داده ای که API شما پشتیبانی می کند شما نیاز به تنظیم Content Type دارید.

برای مثال، نوع (type) جیسون JSON Meime می شود : Content-Type: application/json ، برای XML می شود:  Content-Type: application/xml

می توانید از این لینک به لیست MIME Type های پشتیبانی شده دست یابید.

 API Key:

اگر یه Private API می سازید که میخواهید دسترسی به آن را ببندید یا محدود کنید به دسترسی ها خصوصی، بهترین رویکرد ایمن کردن APIتان با استفاده از API Key است.

این مقاله Designing a Secure REST (Web) API without OAuth بهترین روش جهت ایمن کردن rest api رو پوشش میده. اما در این اموزش هدف آموزش برای مبتدیان است. در نتیجه اینجا ما از یک api key تصادفی برای هر کاربر استفاده می کنیم. کاربر با استفاده از api key شناخته می شود و تمامی عملیات تنها متعلق به همین کاربر قابل اجرا است.
API key باید در فیلد Authorization از header درخواست بجای فرستادن با url قرار گیرد.

Authorization: bf45c093e542f057caee68c47787e7d6

 

اطلاعات بیشتر در زمینه REST API :

1- RESTful Web services: The basics

2- Stackoverflow discussion

3- A video presentation about REST+JSON API Design – Best Practices for Developers by Les Hazlewood, Stormpath

 

2- پیش نیازها:

1- آشنایی مقدماتی با PHP  

2- آشنایی با دستورات MySql

3- پارس کردن json در اندروید

4- اتصال اندروید به PHP و MySql

 

 

قسمت دوم آموزش : لینک

قسمت سوم آموزش: 

مراجع : www.androidhive.info و www.wikipedia.com