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一些常用的正则表达式字符的一些转换
Jul 29 PHP
php 显示指定路径下的图片
Oct 29 PHP
php对大文件进行读取操作的实现代码
Jan 23 PHP
使用PHP接收POST数据,解析json数据
Jun 28 PHP
thinkPHP实现MemCache分布式缓存功能
Mar 23 PHP
PHP基于XMLWriter操作xml的方法分析
Jul 17 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
Oct 10 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
PHP折半(二分)查找算法实例分析
May 12 PHP
Laravel 添加多语言提示信息的方法
Sep 29 PHP
Laravel5.1框架路由分组用法实例分析
Jan 04 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
Mar 09 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的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
php查询操作实现投票功能
2016/05/09 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
简单实现php上传文件功能
2017/09/21 PHP
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
深入了解Python在HDA中的应用
2019/09/05 Python
通过实例学习Python Excel操作
2020/01/06 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
使用css3制作登录表单的步骤
2014/04/07 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
英国著名药妆店:Superdrug
2021/02/13 全球购物
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
食品安全工作方案
2014/05/07 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
2014年药房工作总结
2014/11/22 职场文书
网络妈妈观后感
2015/06/08 职场文书
雷锋的观后感
2015/06/10 职场文书