《PHP应用:PHP编写RESTful接口》要点:
本文介绍了PHP应用:PHP编写RESTful接口,希望对您有用。如果有疑问,可以联系我们。
PHP教程首先我们来认识下RESTful
PHP教程Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www.test.com/user/view/id/1
PHP教程表示获取id为1的用户信息,如果使用Restful风格,可以变成这样:
PHP教程http://www.test.com/user/1
PHP教程可以很明显的看出这样做的好处:
PHP教程1、更简洁的URL,对程序员友好
PHP教程2、不暴露内部代码结构,更安全
PHP教程那么,如何实现这个接口呢?首先,我们需要接收到/user/1部分.
PHP教程
$path = $_SERVER['PATH_INFO'];
$arr = explode('/',$path);
print_r($arr);
PHP教程得到下面的结果:
PHP教程
Array ( [0] => [1] => User [2] => 1 )
PHP教程获取到了参数,下面的操作就很简单了:
PHP教程
if($arr[1] == 'user'){
$model = new UserModel();
$id = $arr[2]; //读取用户信息
$user_info = $model->find($id);
echo json_encode($user_info);
}
PHP教程这样,我们就实现了一个Restful风格的API.
PHP教程下面,我们再看如何实现读取用户列表的接口,传统方式: http://www.test.com/user/list
使用Restful风格,可以更加简洁:
PHP教程http://www.test.com/user
PHP教程和读取用户信息的区别是,user后面没有id,所以我们可以在读取部分的基础上做一下修改:
PHP教程
if($arr[1] == 'user'){
$model = new UserModel();
$id = $arr[2]; if($id){ //读取用户信息
$user_info = $model->find($id);
echo json_encode($user_info);
}else{ //读取用户列表
$user_list = $model->select();
echo json_encode($user_list); } }
PHP教程这样就实现了读取用户列表的接口.
PHP教程下面再看如何实现增加用户的接口,传统方式:
PHP教程http://www.test.com/user/add
PHP教程Restful风格:
PHP教程http://www.test.com/user
和读取用户列表的接口是一样的,怎么区分呢?其实很简单,读取是GET请求,而增加是POST请求,用户信息都存在POST参数中,所以可以对代码进行下面的修改:
PHP教程
if($arr[1] == 'user'){
$model = new UserModel();
$id = $arr[2];
if($id){ //读取用户信息
$user_info = $model->find($id);
echo json_encode($user_info);
}else{
if(IS_POST){ //增加用户
$res = $model->add($_POST);
if($res){ echo 'success';
}else{ echo 'fail'; }
}else{ //读取用户列表
$user_list = $model->select();
echo json_encode($user_list); } } }
PHP教程同样的接口,可以依据HTTP请求方式来执行不同的逻辑.
这就是实现Restful风格API的核心思路,依次类推,我们可以实现编辑用户接口和删除用户接口:
PHP教程http://www.test.com/user/1
只要使用不同的请求方式,就能区分开了.我们可以用PUT请求来执行编辑操作,用DELETE请求来执行删除操作.
PHP教程具体代码就不写了,有兴趣的朋友可以自己尝试实现以下.
PHP教程在Thinkphp框架中也提供了对Restful风格的支持,原理也是类似的.
PHP教程总结一下,Restful风格就是,使用简单的URL和HTTP请求方式来实现接口.
PHP教程PHPRS github
PHP教程这是一个轻量级框架,专为快速开发RESTful接口而设计.如果你和我一样,厌倦了使用传统的MVC框架编写微服务或者前后端分离的API接口,受不了为了一个简单接口而做的很多多余的coding(和CTRL-C/CTRL-V),那么,你肯定会喜欢这个框架!
PHP教程先举个栗子
PHP教程写个HelloWorld.php,放到框架指定的目录下(默认是和index.php同级的apis/目录)
PHP教程
/**
* @path("/hw")
*/
class HelloWorld
{
/**
* @route({"GET","/"})
*/
public function doSomething() {
return "Hello World!";
}
}
PHP教程浏览器输入http://your-domain/hw/
PHP教程你将看到:Hello World!就是这么简单,不需要额外配置,不需要继承也不需要组合.
PHP教程发生了什么
PHP教程回过头看HelloWorld.php,特殊的地方在于注释(@path,@route),没错,框架通过注释获取路由信息和绑定输入输出.但不要担心性能,注释只会在类文件修改后解析一次.更多的@注释后面会说明.
PHP教程再看个更具体的例子
PHP教程这是一个登录接口的例子
PHP教程
/**
* 用户权限验证
* @path("/tokens/")
*/
class Tokens
{
/**
* 登录
* 通过用户名密码授权
* @route({"POST","/accounts/"})
* @param({"account", "$._POST.account"}) 账号
* @param({"password", "$._POST.password"}) 密码
*
* @throws ({"InvalidPassword", "res", "403 Forbidden", {"error":"InvalidPassword"} }) 用户名或密码无效
*
* @return({"body"})
* 返回token,同cookie中的token相同,
* {"token":"xxx", "uid" = "xxx"}
*
* @return({"cookie","token","$token","+365 days","/"}) 通过cookie返回token
* @return({"cookie","uid","$uid","+365 days","/"}) 通过cookie返回uid
*/
public function createTokenByAccounts($account, $password, &$token,&$uid){
//验证用户
$uid = $this->users->verifyPassword($account, $password);
Verify::isTrue($uid, new InvalidPassword($account));
$token = ...;
return ['token'=>$token, 'uid'=>$uid];
}
/**
* @property({"default":"@Users"}) 依赖的属性,由框架注入
* @var Users
*/
public $users;
}
PHP教程还能做什么
PHP教程配合ezsql访问数据库
PHP教程ezsql是一款简单的面向对象的sql构建工具,提供简单的基本sql操作.
PHP教程接口
PHP教程
/** @path(/myclass) */
class MyClass{
/**
* @route({"GET","/do"})
* @param({"arg0","$._GET.arg0"})
*/
public doSomething($arg0){
return Sql::select('xxx')->from('table_xxx')->where( 'xxx = ?', $arg0)->get($this->db);
}
/**
* 依赖注入PDO实例
* @property
* @var PDO
*/
public $db;
}
PHP教程配置文件
PHP教程
{
{
"MyClass":{
"properties":{
"db":"@db1"
}
},
},
"db1":{
"singleton":true,
"class":"PDO",
"pass_by_construct":true,
"properties":{
"dsn":"mysql:host=127.0.0.1;dbname=xxx",
"username":"xxxx",
"passwd":"xxxx"
}
},
}
欢迎参与《PHP应用:PHP编写RESTful接口》讨论,分享您的想法,维易PHP学院为您提供专业教程。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/7518.html