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

با سلام،

در ادامه ی قسمت اول آموزش این جلسه از مرحله 3 پیش خواهیم رفت:

3- Slim PHP Micro Framework

به جای اینکه از اول شروع به نوشتن یه Rest Framework بکنیم، بهتره که از یه فریمورک نوشته شده و آماده استفاده کنیم. که من تو ابن آموزش با توجه به آموزش Rami tavada از فریمورک slim استفاده می کنم و دلایل استفاده کردن از این فریمورک از قرار زیر می باشد:

1- فریمورک بسیار سیکی است، ساده می باشد و. برای مبتدیان فهم فریمورک ساده می باشد. 

2- از تمام متود های HTTP پشتیبانی می کند ( GET, POST, PUT and DELETE) که برای داشتن REST API ضروری هستند.

3- از همه مهمتر، معماری لایه میانی دارد که در فیلتر کردن درخواست ها مفید است. در این مورد ما برای verify کردن API key ازش استفاده می کنیم.

 

دانلود Slim Framework:

از اینجا می توانید دانلود کنید (دانلود نسخه stable) 

 

4- نصب Wamp Server 

wamp server  به شما اجازه نصب apache, php  و mysql  رو با یک installer میدهد که دیگه سختی های نصب جداگانه و گانفیگ کردن هر کدومشون به صورت چداگانه وجود نداره، (همچنین می توانید از Xamp  یا Lamp نیز استفاده کنید، اگر از Mac استفاده می کنید نیز Mamp)  اما Wamp همچنین شامل phpmyadmin می شود که به آسانی ارتباط با پایگاه داده MySql رو برقرار می کند.

Wamp را از اینجا دانلود و نصب کنید(ورژن متناسب با سیستم عامل خودتون رو انتخاب کنید)، پس از نصب برنامه رو از این آدرس اجرا کنید:

Start -> All Programs -> Wamp Server -> Start WampServer

 

داخل مرورگر این دو لینک رو باز کنید تا از نصب درست Wamp مطمئن بشید:

http://localhost/

http://localhost/phpmyadmin/

 

 

5- نصب Chrome Advanced REST client extension برای تست گرفتن از php

Chrome Advanced REST client extension راهی ساده برای تست کردن REST API می باشد. این extension تنظیمات زیادی مانند اضافه کردن request headers، Adding request parameters، changing HTTP method زمانی که لینک فراحاونی می شود را دارد.

خب از اینجا نصبش کنید. بعد از نصب میتویند در Chrome apps پیداش کنید یا آیکونش به گوشه بالا سمت راست اضافه می شود.

 

6- استفاده ازREST API برای اپلیکیشن Task Manager

برای پیاده سازی REST API به مثال از Task Manager App با کمترین قابلیت رو در نظر گرفتم.

1- کاربر میتونه ثبت نام و لاگین انجام بده.

2-عملیات مرتبط با task مانند creating، reading، updating و deleting. تمامی API ها مرتبط با هر task شامل api key در فیلد header شناسایی است.

 

در ادامه لیستی از فراخوانی های API که در این آموزش می سازیم آورده شده است.توجه کنید که url endpoint مشابه برای چندین فراخوانی API  استفاده می شود، اما تفاوت در نوع HTTP Method ای است که برای فراخوانی url استفاده شده است. فرض کنیداگر  /tasks با متود POST فراخوانی شود، یه task جدید ساخته خواهد شد. همانطور که از /tasks رو با متود get فراخونی کنیمو تمام task ها در زیر لیست شده اند:

API Url Structure

URL Method Parameters Description
/register POST name, email, password User registration
/login POST email, password User login
/tasks POST task To create new task
/tasks GET   Fetching all tasks
/tasks/:id GET   Fetching single task
/tasks/:id PUT   Updating single task
/tasks/:id DELETE task, status Deleting single task

 

7- ساخت پایگاه داده MySql

سه تا جدول داریم، فیلد های هر جدول در شکل زیر مشخص شده است:

کوئری ساخت جداول پایگاه داده:

CREATE DATABASE task_manager;
 
USE task_manager;
 
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(250) DEFAULT NULL,
  `email` varchar(255) NOT NULL,
  `password_hash` text NOT NULL,
  `api_key` varchar(32) NOT NULL,
  `status` int(1) NOT NULL DEFAULT '1',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
);
 
CREATE TABLE IF NOT EXISTS `tasks` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `task` text NOT NULL,
  `status` int(1) NOT NULL DEFAULT '0',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
);
 
CREATE TABLE IF NOT EXISTS `user_tasks` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `task_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `task_id` (`task_id`)
);
 
ALTER TABLE  `user_tasks` ADD FOREIGN KEY (  `user_id` ) REFERENCES  `task_manager`.`users` (
`id`
) ON DELETE CASCADE ON UPDATE CASCADE ;
 
ALTER TABLE  `user_tasks` ADD FOREIGN KEY (  `task_id` ) REFERENCES  `task_manager`.`tasks` (
`id`
) ON DELETE CASCADE ON UPDATE CASCADE ;

 

 

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

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