[PHP] Simple PHP MySQL Rest API Sample Example Tutorial
<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>
<?php /* File : Rest.inc.php */ class REST { public $_allow = array(); public $_content_type = "application/json"; public $_request = array(); private $_method = ""; private $_code = 200; public function __construct(){ $this->inputs(); } public function get_referer(){ return $_SERVER['HTTP_REFERER']; } public function response($data,$status){ $this->_code = ($status)?$status:200; $this->set_headers(); echo $data; exit; } private function get_status_message(){ $status = array( 100 => 'Continue', 101 => 'Switching Protocols', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 306 => '(Unused)', 307 => 'Temporary Redirect', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported'); return ($status[$this->_code])?$status[$this->_code]:$status[500]; } public function get_request_method(){ return $_SERVER['REQUEST_METHOD']; } private function inputs(){ switch($this->get_request_method()){ case "POST": $this->_request = $this->cleanInputs($_POST); break; case "GET": case "DELETE": $this->_request = $this->cleanInputs($_GET); break; case "PUT": parse_str(file_get_contents("php://input"),$this->_request); $this->_request = $this->cleanInputs($this->_request); break; default: $this->response('',406); break; } } private function cleanInputs($data){ $clean_input = array(); if(is_array($data)){ foreach($data as $k => $v){ $clean_input[$k] = $this->cleanInputs($v); } }else{ if(get_magic_quotes_gpc()){ $data = trim(stripslashes($data)); } $data = strip_tags($data); $clean_input = trim($data); } return $clean_input; } private function set_headers(){ header("HTTP/1.1 ".$this->_code." ".$this->get_status_message()); header("Content-Type:".$this->_content_type); } } ?>
<?php require_once("Rest.inc.php"); class API extends REST { public $data = ""; //Enter details of your database const DB_SERVER = "localhost"; const DB_USER = "user"; const DB_PASSWORD = "db_password"; const DB = "my_db"; private $db = NULL; public function __construct(){ parent::__construct(); // Init parent contructor $this->dbConnect(); // Initiate 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('Error code 404, Page not found',404); // If the method not exist with in this class, response would be "Page not found". } private function hello(){ echo str_replace("this","that","HELLO WORLD!!"); } private function test(){ // Cross validation if the request method is GET else it will return "Not Acceptable" status if($this->get_request_method() != "GET"){ $this->response('',406); } $myDatabase= $this->db;// variable to access your database $param=$this->_request['var']; // If success everythig is good send header as "OK" return param $this->response($param, 200); } /* * Encode array into JSON */ private function json($data){ if(is_array($data)){ return json_encode($data); } } } // Initiiate Library $api = new API; $api->processApi(); ?>
In the file api.php, provide your MySQL database details in the variables as shown below:
const DB_SERVER = “localhost”;
const DB_USER = “user”;
const DB_PASSWORD = “db_password”;
const DB = “my_db”;
There are two functions defined in api.php,
1) test(){} – For testing GET METHOD
2) hello({} – For simply printing hello world.
Our Rest API Implementation is finished. You can simply call the above two functions using the urls as follows:
http://yourweb.com/MY_API/hello
Output: HELLO WORLD
http://yourweb.com/MY_API/test?var=testing_get_method
Output: testing_get_method