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 第三节 变量介绍
Apr 28 PHP
php提示undefined index的几种解决方法
May 21 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
Jan 14 PHP
PHP连接和操作MySQL数据库基础教程
Sep 29 PHP
php打印一个边长为N的实心和空心菱型的方法
Mar 02 PHP
用PHP代码给图片加水印
Jul 01 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
PHP并发查询MySQL的实例代码
Aug 09 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
php 中self,this的区别和操作方法实例分析
Nov 04 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模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
thinkphp3.x中session方法的用法分析
2016/05/20 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
js获取url中"?"后面的字串方法
2014/05/15 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
Python批量转换文件编码格式
2015/05/17 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
django项目搭建与Session使用详解
2018/10/10 Python
python超时重新请求解决方案
2019/10/21 Python
numba提升python运行速度的实例方法
2021/01/25 Python
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
英语演讲稿范文
2014/01/03 职场文书
个人银行贷款担保书
2014/04/01 职场文书
小学五年级学生评语
2014/04/22 职场文书
迎新生标语大全
2014/10/06 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
期末考试复习计划
2015/01/19 职场文书
羊脂球读书笔记
2015/06/30 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript