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 构造函数construct的前下划线是双的_
Dec 08 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
php调用dll的实例操作动画与代码分享
Aug 14 PHP
php使用sql数据库 获取字段问题介绍
Aug 12 PHP
使用PHPExcel操作Excel用法实例分析
Mar 26 PHP
递归实现php数组转xml的代码分享
May 14 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
Mar 03 PHP
浅谈mysql_query()函数的返回值问题
Sep 05 PHP
PHP 获取客户端 IP 地址的方法实例代码
Nov 11 PHP
php 使用mpdf实现指定字段配置字体样式的方法
Jul 29 PHP
php 中self,this的区别和操作方法实例分析
Nov 04 PHP
PHP 图片处理
Sep 16 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 visitFile()遍历指定文件夹函数
2010/08/21 PHP
javascript 学习之旅 (3)
2009/02/05 Javascript
用javascript判断IE版本号简单实用且向后兼容
2013/09/11 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python 多线程Threading初学教程
2017/08/22 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
pandas 层次化索引的实现方法
2019/07/06 Python
浅谈Python中(&,|)和(and,or)之间的区别
2019/08/07 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
进修护士自我鉴定
2013/10/14 职场文书
应届生骨科医生求职信
2013/10/31 职场文书
公务员职业生涯规划书范文  
2014/01/19 职场文书
美术指导求职信
2014/03/17 职场文书
大学迎新标语
2014/06/26 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
武当山导游词
2015/02/03 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
销售业务员岗位职责
2015/02/13 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
公务员处分决定书
2015/06/25 职场文书
python实现图片批量压缩
2021/04/24 Python
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android