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与SQL注入攻击[二]
Apr 17 PHP
php join函数应用
May 04 PHP
php中设置index.php文件为只读的方法
Feb 06 PHP
ThinkPHP中自定义错误页面和提示页面实例
Nov 22 PHP
php魔术函数__call()用法实例分析
Feb 13 PHP
Yii中表单用法实例详解
Jan 05 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
php中的抽象方法和抽象类
Feb 14 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
yii2.0框架场景的简单使用示例
Jan 25 PHP
PHP实现倒计时功能
Nov 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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
php中定时计划任务的实现原理
2013/01/08 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
各种常用的JS函数整理
2013/10/25 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
关于Javascript回调函数的一个妙用
2016/08/29 Javascript
Less 安装及基本用法
2018/05/05 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
Python协程的用法和例子详解
2017/09/09 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
基于python实现计算两组数据P值
2020/07/10 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
详解px单位html5响应式方案
2018/03/08 HTML / CSS
个人求职简历的自我评价
2013/10/19 职场文书
党支部活动策划方案
2014/08/18 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
2014年大学生工作总结
2014/11/20 职场文书
专项资金申请报告
2015/05/15 职场文书
小学数学教学随笔
2015/08/14 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
MySQL数据库 任意ip连接方法
2022/05/20 MySQL