如果你现在正使用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示例相关推荐

  1. 企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET

    企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET 原文:企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET 先看效果 1.本文演示的是 ...

  2. java8 - 新的时间日期API示例

    Java 8之前的库对时间和日期的支持非常不理想,不用担心,在Java 8中引入全新的时间和日期API,并且都是线程安全的 新时间日期API常用对象介绍 LocalDate: 表示没有时区的日期, L ...

  3. php 百度收录api_php使用百度翻译api示例分享

    这篇文章主要介绍了php使用百度翻译api示例,需要的朋友可以参考下 百度翻译API的PHP代码,测试可以实现,不过英译中可能需要转换编码. function language($value,$fro ...

  4. matlab机械臂工作空间代码_【ROS-Moveit!】机械臂控制探索(3)——基于python的API示例代码分析...

    本文参考Moveit!官方文档. 系统:ubuntu 18.04 / 16.04 ROS:Melodic / Kinetic 概述 基于python的运动组API是最简单的MoveIt!用户接口.其中 ...

  5. 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 ...

  6. Contact Manager Web API 示例[4] 异常处理(Exception Handling)

    联系人管理器web API是一个Asp.net web api示例程序,演示了通过ASP.NET Web API 公开联系信息,并允许您添加和删除联系人,示例地址http://code.msdn.mi ...

  7. Contact Manager Web API 示例[1]CRUD 操作

    联系人管理器web API是一个Asp.net web api示例程序,演示了通过ASP.NET Web API 公开联系信息,并允许您添加和删除联系人,示例地址http://code.msdn.mi ...

  8. 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 ...

  9. 淘宝客API示例演示

    <淘宝客API示例演示> 一.淘宝客API调用初步 二.淘宝客API商品类目调用演示 三.淘宝客API商品检索.浏览演示 四.淘宝客API商品详情调用演示 五.淘宝客API广告点击串获得演 ...

  10. SSM框架与聚合api示例(星座配对demo)

    SSM框架与聚合api示例(星座配对demo) api: 链接: 聚合数据接口. 框架:Spring SpringMVC MyBatis 效果图 输入男女星座,提交后得到各项指数 js代码 <s ...

最新文章

  1. IT容灾系统周期管理图
  2. hashCode() 和equals() 区别和作用
  3. bh1750采集流程图_lcd_bh1750 通过 采集环境光照度,并在野火stm32mini板子的屏幕上显示。 SCM 机开发 272万源代码下载- www.pudn.com...
  4. java string对象创建对象_Java String 创建了几个对象
  5. mysql 默认page大小_Innodb优化之修改页大小
  6. 具体的压栈指令,例子
  7. java matching_LeetCode第[44]题(Java):Wildcard Matching
  8. java-线程-使用阻塞队列(BlockingQueue)控制线程通信
  9. 【.Net Framework 体积大?】不安装.net framework 也能运行!?原理补充-3
  10. [c++] polymorphism without virtual function
  11. Android Studio 中 gradle 下载失败的解决办法
  12. 数据库设计--企业人事管理系统(有关数据库的课程设计)
  13. OpenCV之图像锐化
  14. 计算机的音量找不到了,音量控制不见了_电脑右下角调音量的小喇叭没有了,是怎么回事?该......
  15. 用java做考试管理系统,考试管理系统的开发实现(Java+Web)
  16. Asp.Net常用文件【牛腩】
  17. 网站频繁抓取IP被封
  18. 股票自选股基本函数大全-3
  19. 身份证OCR识别接口的优点
  20. 读书笔记 - 短线操盘:实战技法 第十一章 投资计划的制定与执行

热门文章

  1. 【热文】 为什么程序员痴迷于猫?
  2. 菜鸟教程:HTML表单详解
  3. 串口的使用-ttyUSB0设备
  4. 母牛生小牛问题递归python实现
  5. 会PLC也能玩转机器视觉(二)- 条码识别
  6. HTML中图片无法显示的问题
  7. STM32与SYN6288语音合成模块的使用
  8. 追风去,不如造风来——致敬蚂蚁区块链创新大赛中的参与者们
  9. 制作一个惊艳所有人的计算器
  10. 如何使用Inkscape软件绘制一个LOGO