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 相关文章推荐
一个odbc连mssql分页的类
Oct 09 PHP
PHP安装攻略:常见问题解答(二)
Oct 09 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
一个PHP的ZIP压缩类分享
May 04 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
Oct 30 PHP
PHP后端银联支付及退款实例代码
Jun 23 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
Sep 30 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
php xhprof使用实例详解
Apr 15 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 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
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
PHP中SESSION过期设置
2021/03/09 PHP
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python实现360皮肤按钮控件示例
2014/02/21 Python
python实现扫描日志关键字的示例
2018/04/28 Python
python实现图片筛选程序
2018/10/24 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
Java语言程序设计测试题选择题部分
2014/04/03 面试题
顺丰快递Java软件工程师面试题
2015/07/31 面试题
秋天的怀念教学反思
2014/04/28 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
养牛场项目建议书
2014/05/13 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
民用住房租房协议书
2014/10/29 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书