phalapi-入门篇3(请求和返回)

#phalapi-入门篇3(请求和返回)#

##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架.

这一小节主要讲一下请求(参数验证),返回(怎么返回自己想要的结果),官方文档也有比较详细的说明所以在有些比较基础的地方就一笔带过,讲一点比较实用在项目开发中怎么使用phalapi框架定制出自己想要的请求和返回结果.

请先通读:

[1.12] 参数规则:接口参数规则配置
[1.13] 统一的接口请求方式:?sevice=XXX.XXX
[1.14] 统一的返回格式和结构:ret data msg

附上:

官网地址:http://www.phalapi.net/

开源中国Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release

##1. 请求##

稍微看过Demo代码的童鞋和读了官方文档的童鞋应该都已经知道,请求参数验证是通过模块文件中的getRules方法进行过滤校验的

当然还有default默认值,默认值一般不和requie同时出现,基本上有了这些框架自带的参数过滤校验基本上可以满足大家的需求, 在代码层面使用$this->参数名就能获取到请求的值(这里建议请求的参数名与获取的参数名,名称保持一致避免因为名称混淆导致的出错)

那么具体的业务需求来了,大家都知道get请求不安全一般要是传递参数都需要使用post请求,在phalapi中自带接受请求机制是接受_REQUEST 也就是get请求和post请求通通接受,怎么做到只接受post参数而不接受get参数呢

官方文档有说:

但是这样有个弊端,包括接口名称在内的service参数许必须用post请求传递才能生效,可以在init.php的最前面加上想从get获取的参数负值给post($_POST['service'] = $_GET['service'];)但是不是很推荐这样使用,如果要从根本上解决问题就需要使用自定义的拦截器了(如何搭建使用拦截器会在后面的进阶篇的项目实践讲到)

##2. 返回##

###2.1 定制成功返回结果###

返回我么用个最简单的例子说明,就是官方自带的默认方法

大家可以看下代码层

public function index() {
    return array(
        'title' => 'Hello World!',
        'content' => T('Hi {name}, welcome to use PhalApi!', array('name' => $this->username)),
        'version' => PHALAPI_VERSION,
        'time' => $_SERVER['REQUEST_TIME'],
    );
}

在接口return的内容是在返回值的data参数里面(这样已经是一个约定俗成的规范了)

那么有的人就说了msg里面怎么没有值啊,如果是登录成功了是不是应该返回登录成功的提示?其实这些都是已经封装好的方法大家在Default.index接口的最前面加上**DI()->response->setMsg('获取参数成功');**就能看到如下返回:

这样就有了,那么又有的人说了ret和msg的名字可以修改吗(这种情况经常出现因为要兼容老业务,或者公司内部已经约定俗成)当然是能修改的,大家打开**/PhalApi/Response.php这个文件里面可以看到一个getResult**方法

 public function getResult() {
    $rs = array(
        'ret' => $this->ret,
        'data' => $this->data,
        'msg' => $this->msg,
    );
    return $rs;
}

这里就可以定义返回的key是什么我们把ret改成code就能得到如下返回

那么如果成功的表示是1怎么办?在Response.php开头就有一个变量设置了成功的返回值位200大家可以根据自己的需求改成任何想要的返回值.

/**
 * @var int $ret 返回状态码,其中:200成功,400非法请求,500服务器错误
 */
protected $ret = 200;

###2.2 失败了返回###

讲了这么多都是围绕着成功所说的,当然我们经常会遇到失败的情况我们要如何应对呢?大家试着在Default.index接口前面加上如下一段代码:

throw new PhalApi_Exception_BadRequest('失败了');

会得到如下结果:

这就是所谓的报错机制当然这个报错机制也是可以定制的,大家可以进入到PhalApi_Exception_BadRequest看一下

class PhalApi_Exception_BadRequest extends PhalApi_Exception{

    public function __construct($message, $code = 0) {
        parent::__construct(
            T('Bad Request: {message}', array('message' => $message)), 400 + $code
        );
    }
}

失败默认$code是0+400,如果你在'失败了'后面加上一个参数

throw new PhalApi_Exception_BadRequest('失败了',1);

那么code就会返回401,当然你也可以去掉默认的+400那么就会返回你输入的值了,具体也是看业务需求

##3. 总结##

从本小节可以看出phalapi框架确实很灵活完全可以按照自己定义想要的业务需求,而且报错机制也非常优雅,在本节后也希望大家能动手去尝试一下各种各样不同的请求以及返回,下一小节会讲返回结果国际化高可用以及自动生成文档.

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

官网QQ交流群:421032344 欢迎大家的加入!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python成长之路

(汇总)os模块以及shutil模块对文件的操作

1375
来自专栏海天一树

小朋友学Python(17):文件

Python 提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file 对象做大部分的文件操作。 一、打开和关闭文件 例1 (1)创建名为test...

2795
来自专栏大前端_Web

NodeJS学习二CommonJS规范

Node程序由许多个模块组成,每个模块就是一个文件。Node模块采用了CommonJS规范。

1362
来自专栏游戏开发那些事

【Linux程序设计】之进程控制&守护进程

这个系列的博客贴的都是我大二的时候学习Linux系统高级编程时的一些实验程序,都挺简单的。

1862
来自专栏转载gongluck的CSDN博客

UNPv13:#第1章#简介

概述 ? TCP本身并不提供记录结束标志:如果应用程序需要确定记录的边界,它就要自己去实现,已有一些常用的方法可供选择。从TCP套接字读取数据时,我们总...

3199
来自专栏流媒体

C语言编译过程

预编译结果解释 # linenum filename flags 分别对应行号、文件、标识。 flag对应的含义

2282
来自专栏python3

linux批量kill进程

ps -ef|grep orderMatcherSend.php |grep -v grep|cut -c 9-15|xargs kill -9

952
来自专栏coding

Linux笔记2

1582
来自专栏小李刀刀的专栏

Blade 模板中有关 section 的那些事

Laravel 框架中的 Blade 模板引擎,很好用,但是在官方文档中有关 Blade 的介绍并不详细,有些东西没有写出来,而有些则是没有说清楚。比如,使用中...

3919
来自专栏Python

python文件和目录操作方法大全

一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.get...

3276

扫码关注云+社区

领取腾讯云代金券