REST API示例

来源:互联网 发布:it专业学校排名 编辑:程序博客网 时间:2024/05/16 14:20

如果你现在正使用iphone、Android以及Web等多种平台工作,请看一下这篇文章,它会告诉你如何使用PHP创建RESTful API。Representational state transfer (REST) 是一个用于向不同应用分发数据的软件系统。Web服务系统会以JSON或者XML方式响应状态码。

REST API处理流程


REST API处理流程

数据库

数据库表users包含了user_id, user_fullname, user_email, user_password 和 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类:api.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();

提交登陆

通过访问REST API地址http://localhost/rest/login/ 显示从users表中查询出的用户数据。Restful API 的登录状态是根据状态码工作的。如果状态码为200,则登陆成功;否则状态码为204,会显示失败信息。更多的状态码信息请查看示例文件中的Rest.inc.php。

private function login(){// Cross validation if the request method is POST else it will return "Not Acceptable" statusif($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); }

获取用户信息

通过访问REST API 地址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}

删除用户信息

根据user_id删除特定用户的信息,只需要访问REST API地址http://localhost/rest/deleteUser/


private function deleteUser(){ if($this->get_request_method() != "DELETE"){     $this->response('',406); } $id = (int)$this->_request['id']; if($id > 0){     mysql_query("DELETE FROM users WHERE user_id = $id");        $success = array('status' => "Success", "msg" => "Successfully one record deleted.");     $this->response($this->json($success),200); }else{     $this->response('',204); // If no records "No Content" status }}

Chrome拓展

测试PHP restful API 响应的一个chrome的插件为Advanced REST client Application

.htaccess code
使用.htaccess使URL更加友好。在demo示例中修改htaccess.txt to .htaccess。

<IfModule mod_rewrite.c>RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-sRewriteRule ^(.*)$ api.php?rquest=$1 [QSA,NC,L]  RewriteCond %{REQUEST_FILENAME} -dRewriteRule ^(.*)$ api.php [QSA,NC,L]  RewriteCond %{REQUEST_FILENAME} -s RewriteRule ^(.*)$ api.php [QSA,NC,L]</IfModule>



0 0
原创粉丝点击