نام دیگر restful api واژه rest api است.

restful api یک معماری از وب سرویس است و نباید آن را همان وب سرویس بدانیم.

یکی از پروتکل های وب سرویس soap است.

 

وب سرویس چیست و چه کاربردی دارد؟

برای کار کردن با restful api بهتر است بدانیم وب سرویس چیست و به چه شکل کار می کند.

وب سرویس یک واسط برای ارتباط نرم افزارهای مختلف با یکدیگر می باشد.نرم افزارها توسط زبان های مختلف برنامه نویسی شده است. اما به چه شکل می توانند آنها با هم ارتباط برقرار کنند؟

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

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

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

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

برگشت اطلاعات بر روی صفحه وب با فرمت json است.

 

تقاوت webpage با web service

وب پیج یا web page که طراحی می شود دارای تگ های مختلف جهت نمایش اطلاعات در مرورگر است در صورتی که وب سرویس ها اطلاعات را در قالب xml یا json به خروجی ارسال می کنند.

json یا xml یک استاندارد برای تبادل اطلاعات بین وب سرویس ها است.

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

 

نحوه انتقال داده میان client و server

برای انتقال داده میان کاربر و سرور از پروتکل http استفاده می شود.مزیت http این است که می توان از متدهای POST, GET, PUT, DELETE استفاده کرد.

شما می توانید با استفاده از متدهای POST و GET درخواست خود را ارسال کرده و پاسخ آن را دریافت کنید.

 

شروع ساخت وب سرویس

برای شروع در پوشه htdocs مربوط به نرم افزار xampp پوشه ای به نام restfull_api ایجاد می کنیم. در این پوشه دو فایل برای سمت کاربر و سمت سرور با نام های زیر ایجاد می نماییم.

فایل webservice.php ارائه کننده وب سرویس برای نمایش اطلاعات کاربران است.

فایل clientside.php استفاده کننده از وب سرویس ارائه شده است.

 

ساخت وب سرویس در فایل webservice.php

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

حال قرار است چه کاری را انجام دهیم؟ ما جدولی در پایگاه داده به نام tbl_users داریم که لیست کاربران در آن قرار دارد.

کاربر درخواست یک کاربر با نام کاربری در حالت GET ارسال می کند.در صورت وجود داشتن کاربر اطلاعات کامل آن در پاسخ در قالب json برگشت داده می شود.

متدی که هم می توانیم کار کنیم می تواند GET یا POST باشد.

در اینجا با متد GET شروع می کنیم. فرض کنید کاربر وارد آدرس “http://localhost/restfull_api/webservice.php?username=amir.javanmir” زیر شده است.

درون فایل webservice دستور دریافت اطلاعات از طریق متد GET را وارد می کنیم.

مثال:

مقدار بازگشتی یک رشته که همان نام کاربری وارده شده است.در ابتدا بررسی می کنیم که آیا درخواست با GET ارسال شده است یا خیر.

مثال:

حال اگر این مقدار GET تنظیم نشده بود باید شرط خود را در حالت else قرار دهیم.

مثال:

حال مقدار get را به متغیری تخصیص میدهیم و برای بالا بردن امنیت از توابع addslashes و htmlentites استفاده می کنیم. این توابع برای داده هایی که از کاربر دریافت می شود مفید هستند.

مثال:

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

برای دریافت خطاها از دستور try و catch استفاده کرده ایم. دستور اتصال به پایگاه داده را در بخش try قرار می دهیم.

مثال:

به آدرس “http://localhost/phpmyadmin/” رفته و دیتابیسی به نام restapi ایجاد می نمائیم.

این دیتابیس جدولی به نام tbl_users با ۴ فیلد دارد.

فیلدها عبارتند از:

  • id(int 11 – auto increment)
  • name(varchar 200)
  • family(varchar 200)
  • username(varchar 200)
  • tel(varchar 200)

 

برای تست ۲ کاربر در جدول tbl_users وارد می نمائیم.یکی از کاربران دارای نام کاربری amir.javanmir است.

اگر به آدرس http://localhost/restfull_api/webservice.php?username=amir.javanmir بروید در صورت درست بودن نام دیتابیس و اطلاعات اتصال خطایی نخواهید داشت.

 

ایجاد کوئری جهت انتخاب کاربر براساس نام کاربری درخواست داده شده

زمانی که توانستیم به پایگاه داده متصل شویم کوئری انتخاب کاربر براساس نام کاربری username را ایجاد می کنیم.

مثال:

حال باید دستور اجرای کوئری را وارد کنیم و نتیجه را در قالب آرایه دریافت کنیم.

مثال:

اگر به آدرس http://localhost/restfull_api/webservice.php?username=amir.javanmir بروید در صورت وجود داشتن نام کاربری آرایه ای از اطلاعات کاربر را نمایش می دهد.

مقدار بازگشت داده شده:

در صورتی هم نام کاربری وجود نداشته باشد مقدار username not found! نمایش داده نمی شود.

 

بازگشت اطلاعات کاربر در قالب json

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

برای تجمیع اطلاعات، اطلاعات کاربر را درون آرایه ای به نام response برگشت می دهیم.

مثال:

حال آرایه response را در قالب json و با استفاده از تابع json_encode برگشت می دهیم.

مثال:

خروجی نرم افزار در صورت وجود نام کاربری amir.javanmir:

خروجی در صورت وجود نداشتن نام کاربری amir.javanmirs:

 

تغییر نوع محتوای صفحه از text/html به json

نوع سند شما در هنگام بارگزاری text/html است.برای تست به بخش developer tools مرورگر رفته و بر روی تب network کلیک می نماییم.

صفحه را بارگزاری مجدد کنید.بر روی اولین آیتم نمایش داده شده کلیک کنید.در بخش response headers نوع Content-Type برابر با text/html; charset=UTF-8 است.

برای تغییر نوع سند header جدید در ابتدای اسکریپت خود بصورت application/json تنظیم می کنیم.

مثال:

تا اینجا توانستیم وب سرویس خود را تنظیم کرده و خروجی json براساس کاربر موردنظر بدهیم.

 

دریافت و نمایش اطلاعات json توسط فایل client.php

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

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

برای خواندن اطلاعات صفحه “http://localhost/restfull_api/webservice.php?username=amir.javanmir” از تابع file_get_contents استفاده می کنیم.

مقدار دریافتی را به متغیری به نام content تخصیص می دهیم.

مثال:

مقدار دریافتی متغیر content از نوع json است که باید دوباره به آرایه تبدیل شود.برای تبدیل json به آرایه از تابع json_decode استفاده می نمائیم.

مثال:

مقدار بازگشتی:

نمایش نام کاربری:

توانستیم با ارسال درخواست به آدرس دیگر اطلاعات کاربر amir javanmir را دریافت کرده و نام کاربری را نمایش دهیم.