#phalapi-入门篇3(请求和返回)#
![](http://webtools.qiniudn.com/master-LOGO-20150410_50.jpg)
##前言##
***先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架.***
这一小节主要讲一下请求(参数验证),返回(怎么返回自己想要的结果),官方文档也有比较详细的说明所以在有些比较基础的地方就一笔带过,讲一点比较实用在项目开发中怎么使用phalapi框架定制出自己想要的请求和返回结果.
请先通读:
[1.12] 参数规则:接口参数规则配置
[1.13] 统一的接口请求方式:?sevice=XXX.XXX
[1.14] 统一的返回格式和结构:ret data msg
附上:
喵了个咪的博客:[w-blog.cn](w-blog.cn)
官网地址:[http://www.phalapi.net/](http://www.phalapi.net/ "PhalApi官网")
开源中国Git地址:[http://git.oschina.net/dogstar/PhalApi/tree/release](http://git.oschina.net/dogstar/PhalApi/tree/release "开源中国Git地址")
##1. 请求##
稍微看过Demo代码的童鞋和读了官方文档的童鞋应该都已经知道,请求参数验证是通过模块文件中的**getRules**方法进行过滤校验的
![](http://i.imgur.com/xAhZscJ.png)
当然还有**default**默认值,默认值一般不和requie同时出现,基本上有了这些框架自带的参数过滤校验基本上可以满足大家的需求,
在代码层面使用$this->参数名就能获取到请求的值(这里建议请求的参数名与获取的参数名,名称保持一致避免因为名称混淆导致的出错)
那么具体的业务需求来了,大家都知道get请求不安全一般要是传递参数都需要使用post请求,在phalapi中自带接受请求机制是**接受_REQUEST**
也就是get请求和post请求通通接受,怎么做到只接受post参数而不接受get参数呢
官方文档有说:
![](http://i.imgur.com/MbkhaOh.png)
但是这样有个弊端,包括接口名称在内的service参数许必须用post请求传递才能生效,可以在init.php的最前面加上想从get获取的参数负值给post(**$_POST['service'] = $_GET['service'];**)但是不是很推荐这样使用,如果要从根本上解决问题就需要使用自定义的拦截器了(**如何搭建使用拦截器会在后面的进阶篇的项目实践讲到**)
##2. 返回##
###2.1 定制成功返回结果###
返回我么用个最简单的例子说明,就是官方自带的默认方法
![](http://i.imgur.com/XIqJxXN.png)
大家可以看下代码层
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('获取参数成功');**就能看到如下返回:
![](http://i.imgur.com/IMOdESv.png)
这样就有了,那么又有的人说了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就能得到如下返回
![](http://i.imgur.com/Qz28kTF.png)
那么如果成功的表示是1怎么办?在Response.php开头就有一个变量设置了成功的返回值位200大家可以根据自己的需求改成任何想要的返回值.
/**
* @var int $ret 返回状态码,其中:200成功,400非法请求,500服务器错误
*/
protected $ret = 200;
###2.2 失败了返回###
讲了这么多都是围绕着成功所说的,当然我们经常会遇到失败的情况我们要如何应对呢?大家试着在**Default.index**接口前面加上如下一段代码:
throw new PhalApi_Exception_BadRequest('失败了');
会得到如下结果:
![](http://i.imgur.com/Ts5Yn0x.png)
这就是所谓的报错机制当然这个报错机制也是可以定制的,大家可以进入到**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 欢迎大家的加入!**
####[上一章](/wikis/%5b7.2%5d-phalapi-%e5%85%a5%e9%97%a8%e7%af%872(%e6%8a%8a%e5%ae%83%e7%8e%a9%e8%b5%b7%e6%9d%a5).html) [文档首页](/wikis/) [下一章](/wikis/%5b7.4%5d-phalapi-%e5%85%a5%e9%97%a8%e7%af%874(%e5%9b%bd%e9%99%85%e5%8c%96%e9%ab%98%e5%8f%af%e7%94%a8%e5%92%8c%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90%e6%96%87%e6%a1%a3).html)
- 空白目录
- [7.1]-phalapi-入门篇1(简单介绍以及环境搭建)
- [7.2]-phalapi-入门篇2(把它玩起来)
- [7.3]-phalapi-入门篇3(请求和返回)
- [7.4]-phalapi-入门篇4(国际化高可用和自动生成文档)
- [7.5]-phalapi-入门篇5(数据库操作和Model层)
- [7.6]-phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)
- [7.7]-phalapi-进阶篇1(三层结构Api,Domain,和Model)
- [7.8]-phalapi-进阶篇2(DI依赖注入和单例模式)
- [7.9]-phalapi-进阶篇3(自动加载和拦截器)
- [7.10]-phalapi-进阶篇4(notorm进阶以及事务操作)
- [7.11]-phalapi-进阶篇5(数据库读写分离)
- [7.12]-phalapi-进阶篇6(解决大量数据存储数据库分表分库拓展)
- [7.13]-phalapi-进阶篇7(使用缓存以及用redis拓展解决实际问题)
- [7.14]-phalapi-进阶篇8(PhalApi能带来什么和进阶篇总结)