PHP编写RESTful接口的方法


Posted in PHP onFebruary 21, 2016

这是一个轻量级框架,专为快速开发RESTful接口而设计。如果你和我一样,厌倦了使用传统的MVC框架编写微服务或者前后端分离的API接口,受不了为了一个简单接口而做的很多多余的coding(和CTRL-C/CTRL-V),那么,你肯定会喜欢这个框架!

先举个栗子
1、写个HelloWorld.php,放到框架指定的目录下(默认是和index.php同级的apis/目录)

/**
 * @path("/hw")
 */
class HelloWorld
{
  /** 
   * @route({"GET","/"})
   */
  public function doSomething() {
    return "Hello World!";
  }
}

2、浏览器输入http://your-domain/hw/
你将看到:Hello World!就是这么简单,不需要额外配置,不需要继承也不需要组合。
发生了什么
回过头看HelloWorld.php,特殊的地方在于注释(@path,@route),没错,框架通过注释获取路由信息和绑定输入输出。但不要担心性能,注释只会在类文件修改后解析一次。更多的@注释后面会说明。

再看个更具体的例子
这是一个登录接口的例子

/**
 * 用户权限验证
 * @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;
}

还能做什么

  • 依赖管理(依赖注入),
  • 自动输出接口文档(不是doxgen式的类、方法文档,而是描述http接口的文档)
  • 接口缓存
  • hook

配合ezsql访问数据库
ezsql是一款简单的面向对象的sql构建工具,提供简单的基本sql操作。
接口

/** @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;
}

配置文件

{
  {
    "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 相关文章推荐
PHP5/ZendEngine2的改进
Oct 09 PHP
PHP 得到根目录的 __FILE__ 常量
Jul 23 PHP
php中邮箱地址正则表达式实现与详解
Apr 24 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 PHP
探讨:使用XMLSerialize 序列化与反序列化
Jun 08 PHP
深入Nginx + PHP 缓存详解
Jul 11 PHP
php导出word格式数据的代码实例
Nov 25 PHP
php针对cookie操作的队列操作类实例
Dec 10 PHP
自己写的php中文截取函数mb_strlen和mb_substr
Feb 09 PHP
详解 PHP加密解密字符串函数附源码下载
Dec 18 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
PHP常见漏洞攻击分析
Feb 21 #PHP
php采集神器cURL使用方法详解
Feb 19 #PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
Feb 19 #PHP
PHP利用imagick生成组合缩略图
Feb 19 #PHP
对比分析php中Cookie与Session的异同
Feb 19 #PHP
php强大的时间转换函数strtotime
Feb 18 #PHP
php实现中文转数字
Feb 18 #PHP
You might like
php设计模式 State (状态模式)
2011/06/26 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
2016/12/19 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
2016/02/22 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
python追加元素到列表的方法
2015/07/28 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
投资入股合作协议书
2014/10/28 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
经理岗位职责
2015/02/02 职场文书
会议通知范文
2015/04/15 职场文书
党支部对转正的意见
2015/06/02 职场文书
警示教育片观后感
2015/06/17 职场文书
标准发言稿结尾
2019/07/18 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书
Python可变集合和不可变集合的构造方法大全
2021/12/06 Python