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 相关文章推荐
PHP URL地址获取函数代码(端口等) 推荐
May 15 PHP
php数据库密码的找回的步骤
Jan 12 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
php 中英文语言转换类代码
Aug 11 PHP
PHP基础之运算符的使用方法
Apr 28 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
Nov 30 PHP
PHP基于单例模式编写PDO类的方法
Sep 13 PHP
php使用file函数、fseek函数读取大文件效率对比分析
Nov 04 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
PHP APP微信提现接口代码
Sep 30 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
Mar 18 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
2015/10/27 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
JS的replace方法介绍
2012/10/20 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
JavaScript中的this机制
2016/01/30 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
2019/01/25 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
Python如何实现大型数组运算(使用NumPy)
2020/07/24 Python
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
寒假思想汇报
2014/01/10 职场文书
公司员工检讨书
2014/02/08 职场文书
工程力学专业自荐信范文
2014/03/17 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
导游词之昭君岛
2020/01/17 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python