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中的字符串函数
Oct 09 PHP
使用PHP获取网络文件的实现代码
Jan 01 PHP
获取远程文件大小的php函数
Jan 11 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
Apr 28 PHP
解析用PHP实现var_export的详细介绍
Jun 20 PHP
国外十大最流行的PHP框架排名
Jul 04 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
php中获取主机名、协议及IP地址的方法
Nov 18 PHP
php延迟静态绑定实例分析
Feb 08 PHP
php通过淘宝API查询IP地址归属等信息
Dec 25 PHP
PHP统计目录中文件以及目录中目录大小的方法
Jan 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创建session的方法实例详解
2015/01/27 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
jQuery 创建Dom元素
2010/05/07 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
基于jquery插件实现拖拽删除图片功能
2020/08/27 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
深入理解react 组件类型及使用场景
2019/03/07 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
python显示生日是星期几的方法
2015/05/27 Python
Python抓取框架 Scrapy的架构
2016/08/12 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
python根据时间获取周数代码实例
2019/09/30 Python
基于python-pptx库中文文档及使用详解
2020/02/14 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
建筑公司文秘岗位职责
2013/11/29 职场文书
实用求职信范文分享
2013/12/25 职场文书
小学生期末自我鉴定
2014/01/19 职场文书
综合实践教学反思
2014/01/31 职场文书
期末自我鉴定
2014/02/02 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
Nginx配置https的实现
2021/11/27 Servers