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 相关文章推荐
Mysql数据库操作类( 1127版,提供源码下载 )
Dec 02 PHP
php注销代码(session注销)
May 31 PHP
php图片加中文水印实现代码分享
Oct 31 PHP
php对mongodb的扩展(初出茅庐)
Nov 11 PHP
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
php var_export与var_dump 输出的不同
Aug 09 PHP
yii上传文件或图片实例
Apr 01 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
Jun 12 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
PHP CURL使用详解
Mar 21 PHP
PHP设计模式之观察者模式定义与用法分析
Apr 04 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 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数据库操作面向对象的优点
2006/10/09 PHP
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
PHP实现验证码校验功能
2017/11/16 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
2020/12/07 Vue.js
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
python使用selenium实现批量文件下载
2019/03/11 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
Python udp网络程序实现发送、接收数据功能示例
2019/12/09 Python
PYcharm 激活方法(推荐)
2020/03/23 Python
Python如何执行系统命令
2020/09/23 Python
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
法学自荐信
2014/06/20 职场文书
爱心募捐感谢信
2015/01/22 职场文书
2015个人简历自我评价语
2015/03/11 职场文书
2015年电工工作总结
2015/04/10 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js