REST API示例
如果你现在正使用iphone、Android以及Web等多种平台工作,请看一下这篇文章,它会告诉你如何使用PHP创建RESTful API。Representational state transfer (REST) 是一个用于向不同应用分发数据的软件系统。Web服务系统会以JSON或者XML方式响应状态码。
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 connectionprivate 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 stringpublic 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 JSONprivate 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 validationsif(!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" statusif($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} -sRewriteRule ^(.*)$ api.php [QSA,NC,L]
</IfModule>
REST API示例相关推荐
- 企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET
企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET 原文:企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET 先看效果 1.本文演示的是 ...
- java8 - 新的时间日期API示例
Java 8之前的库对时间和日期的支持非常不理想,不用担心,在Java 8中引入全新的时间和日期API,并且都是线程安全的 新时间日期API常用对象介绍 LocalDate: 表示没有时区的日期, L ...
- php 百度收录api_php使用百度翻译api示例分享
这篇文章主要介绍了php使用百度翻译api示例,需要的朋友可以参考下 百度翻译API的PHP代码,测试可以实现,不过英译中可能需要转换编码. function language($value,$fro ...
- matlab机械臂工作空间代码_【ROS-Moveit!】机械臂控制探索(3)——基于python的API示例代码分析...
本文参考Moveit!官方文档. 系统:ubuntu 18.04 / 16.04 ROS:Melodic / Kinetic 概述 基于python的运动组API是最简单的MoveIt!用户接口.其中 ...
- rest api 示例2_REST API教程– REST Client,REST Service和API调用通过代码示例进行了解释
rest api 示例2 Ever wondered how login/signup on a website works on the back-end? Or how when you sear ...
- Contact Manager Web API 示例[4] 异常处理(Exception Handling)
联系人管理器web API是一个Asp.net web api示例程序,演示了通过ASP.NET Web API 公开联系信息,并允许您添加和删除联系人,示例地址http://code.msdn.mi ...
- Contact Manager Web API 示例[1]CRUD 操作
联系人管理器web API是一个Asp.net web api示例程序,演示了通过ASP.NET Web API 公开联系信息,并允许您添加和删除联系人,示例地址http://code.msdn.mi ...
- json.parser性能_Jackson JSON Java Parser API示例教程
json.parser性能 Jackson JSON Java Parser is very popular and used in Spring framework too. Java JSON P ...
- 淘宝客API示例演示
<淘宝客API示例演示> 一.淘宝客API调用初步 二.淘宝客API商品类目调用演示 三.淘宝客API商品检索.浏览演示 四.淘宝客API商品详情调用演示 五.淘宝客API广告点击串获得演 ...
- SSM框架与聚合api示例(星座配对demo)
SSM框架与聚合api示例(星座配对demo) api: 链接: 聚合数据接口. 框架:Spring SpringMVC MyBatis 效果图 输入男女星座,提交后得到各项指数 js代码 <s ...
最新文章
- IT容灾系统周期管理图
- hashCode() 和equals() 区别和作用
- bh1750采集流程图_lcd_bh1750 通过 采集环境光照度,并在野火stm32mini板子的屏幕上显示。 SCM 机开发 272万源代码下载- www.pudn.com...
- java string对象创建对象_Java String 创建了几个对象
- mysql 默认page大小_Innodb优化之修改页大小
- 具体的压栈指令,例子
- java matching_LeetCode第[44]题(Java):Wildcard Matching
- java-线程-使用阻塞队列(BlockingQueue)控制线程通信
- 【.Net Framework 体积大?】不安装.net framework 也能运行!?原理补充-3
- [c++] polymorphism without virtual function
- Android Studio 中 gradle 下载失败的解决办法
- 数据库设计--企业人事管理系统(有关数据库的课程设计)
- OpenCV之图像锐化
- 计算机的音量找不到了,音量控制不见了_电脑右下角调音量的小喇叭没有了,是怎么回事?该......
- 用java做考试管理系统,考试管理系统的开发实现(Java+Web)
- Asp.Net常用文件【牛腩】
- 网站频繁抓取IP被封
- 股票自选股基本函数大全-3
- 身份证OCR识别接口的优点
- 读书笔记 - 短线操盘:实战技法 第十一章 投资计划的制定与执行