Portfolio
My Blog
Scroll down to discover
Search
Categories

Tạo dịch vụ API trong PHP, PHP API rest

October 15, 2016Category : Code/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.

CODE

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.

CODE

<?php
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.

CODE

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/

CODE

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

CODE

<IfModule mod_rewrite.c>
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] </IfModule>

01.
© Oliver / All rights reserved.
To top