Tạo dịch vụ API trong PHP, PHP API rest
Bạn đang làm việc với nhiều thiết bị như iPhone, Android và Web rồi đi xem một bài giải thích bạn làm thế nào để phát triển một API RESTful trong PHP. Chuyển giao trạng thái biểu hiện (REST) là một hệ thống Phần mềm để phân phối dữ liệu cho các loại ứng dụng khác nhau. Một hệ thống web ...
Bạn đang làm việc với nhiều thiết bị như iPhone, Android và Web rồi đi xem một bài giải thích bạn làm thế nào để phát triển một API RESTful trong PHP. Chuyển giao trạng thái biểu hiện (REST) là một hệ thống Phần mềm để phân phối dữ liệu cho các loại ứng dụng khác nhau. Một hệ thống web service với mã phản hồi ở định dạng JSONhay XML.
Database
Mẫu cơ sở dữ liệu table users với các cột user_id, user_fullname, user_email,user_password và user_status.
CREATE TABLE IF NOT EXISTS `users`
(
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_fullname` varchar(25) NOT NULL,
`user_email` varchar(50) NOT NULL,
`user_password` varchar(50) NOT NULL,
`user_status` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Rest API Class: api.php
Chứa mã PHP đơn giản, ở đây bạn phải sửa đổi các chi tiết cấu hình cơ sở dữ liệu nhưtên cơ sở dữ liệu, tên người dùng và mật khẩu.
require_once("Rest.inc.php");
class API extends REST
{
public $data = "";
const DB_SERVER = "localhost";
const DB_USER = "Database_Username";
const DB_PASSWORD = "Database_Password";
const DB = "Database_Name";
private $db = NULL;
public function __construct()
{
parent::__construct();// Init parent contructor
$this->dbConnect();// Initiate Database connection
}
//Database connection
private function dbConnect()
{
$this->db = MySQL_connect(self::DB_SERVER,self::DB_USER,self::DB_PASSWORD);
if($this->db)
MySQL_select_db(self::DB,$this->db);
}
//Public method for access api.
//This method dynmically call the method based on the query string
public function processApi()
{
$func = strtolower(trim(str_replace("/","",$_REQUEST['rquest'])));
if((int)method_exists($this,$func) > 0)
$this->$func();
else
$this->response(',404);
// If the method not exist with in this class, response would be "Page not found".
}
private function login()
{
..............
}
private function users()
{
..............
}
private function deleteUser()
{
.............
}
//Encode array into JSON
private function json($data)
{
if(is_array($data)){
return json_encode($data);
}
}
}
// Initiiate Library
$api = new API;
$api->processApi();
?>
Login POST
Hiển thị hồ sơ các người dùng của table users ở địa chỉ http://localhost/rest/login/
Tình trạng đăng nhập Restful API này làm việc với các mã trạng thái: 200 đăng nhập thành công,204 hiển thị lỗi. Để biết thêm thông tin mã trạng thái hãy xem file Rest.inc.php trong file đính kèm.
private function login()
{
// Cross validation if the request method is POST else it will return "Not Acceptable" status
if($this->get_request_method() != "POST")
{
$this->response(',406);
}
$email = $this->_request['email'];
$password = $this->_request['pwd'];
// Input validations
if(!empty($email) and !empty($password))
{
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
$sql = MySQL_query("SELECT user_id, user_fullname, user_email FROM users WHERE user_email = '$email' AND user_password = '".md5($password)."' LIMIT 1", $this->db);
if(MySQL_num_rows($sql) > 0){
$result = MySQL_fetch_array($sql,MySQL_ASSOC);
// If success everythig is good send header as "OK" and user details
$this->response($this->json($result), 200);
}
$this->response(', 204); // If no records "No Content" status
}
}
// If invalid inputs "Bad Request" status message and reason
$error = array('status' => "Failed", "msg" => "Invalid Email address or Password");
$this->response($this->json($error), 400);
}
Users GET
Hiển thị thông tn user từ table users. Rest API URL: http://localhost/rest/users/
private function users()
{
// Cross validation if the request method is GET else it will return "Not Acceptable" status
if($this->get_request_method() != "GET")
{
$this->response(',406);
}
$sql = MySQL_query("SELECT user_id, user_fullname, user_email FROM users WHERE user_status = 1", $this->db);
if(MySQL_num_rows($sql) > 0)
{
$result = array();
while($rlt = MySQL_fetch_array($sql,MySQL_ASSOC))
{
$result[] = $rlt;
}
// If success everythig is good send header as "OK" and return list of users in JSON format
$this->response($this->json($result), 200);
}
$this->response(',204); // If no records "No Content" status
}
.htaccess code
Rewriting mã cho URL thân thiện. Trong đoạn mã tải về bạn chỉ cần sửa đổihtaccess.txt thành .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ api.php?rquest=$1 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ api.php [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^(.*)$ api.php [QSA,NC,L]