文档章节

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

喵了_个咪
 喵了_个咪
发布于 2015/09/29 09:52
字数 1320
阅读 944
收藏 1

#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 欢迎大家的加入!

© 著作权归作者所有

喵了_个咪
粉丝 337
博文 165
码字总数 214149
作品 4
杨浦
技术主管
私信 提问
PhalApi (π框架) - v1.4.0 发布

在五四青年节之际,PhalApi迎来了1.4.0版本更新,此次更新围绕着快速开发为开发者提供更方便的工具功能考虑,实现了更友好的调试方式,更多的工具函数以及可以随时埋点的全球追踪器(看的宝宝的口...

喵了_个咪
2017/05/05
685
3
PhalApi 1.3.5 贺岁发布,PHP 轻量接口框架

[前言] 借春节来临之际, PhalApi(π框架)在此发布v1.3.5幺鸡贺岁小版本,同时祝愿各位同学新春快乐、万事如意! 基于老版本开发的应用可以无缝升级到v1.3.5版本,直接覆盖核心文件PhalApi...

暗夜在火星
2017/01/06
825
6
PhalApi 1.2.0 发布,PHP 后台接口开发框架

PhalApi 1.2.0 版本的开启,是为了更好地进入多人协助开发时代 其中,主要更新内容如下: 1、接口返回参数,根据代码return注释,自动生成在线文档 2、接口参数规则中追加对文件参数的验证支...

暗夜在火星
2015/06/05
1K
30
【双12首发】终于等来了!PhalApi-iView-admin 开源后台框架

PhalApi-iView-admin 开源后台框架 码云地址:https://gitee.com/dogstar/phalapi-iview-admin Github地址:https://github.com/phalapi/phalapi-iview-admin 主要采用的技术: PhalApi 开源......

暗夜在火星
2018/12/12
0
0
phalapi-进阶篇2(DI依赖注入和单例模式)

先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 离上一次更新过去了快两周,在其中编写了一个关于DB分表分库解决大数据量的拓展,有兴趣的童鞋可以了解了解.废话...

喵了_个咪
2015/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nproc systemd on CentOS 7

Increasing nproc for processes launched by systemd on CentOS 7 Ask Question I have successfully increased the nofile and nproc value for the local users, but I couldn't find a p......

MtrS
今天
3
0
了解微信小程序下拉刷新功能

小程序提供了这个事件。 onPullDownRefresh() 监听用户下拉刷新事件。 如果要开启下拉刷新功能,要先到json配置: "enablePullDownRefresh":true 配置后下拉有反应了但是没有加载效果,在onP...

oixxan__
今天
2
0
springmvc java对象转json,上传下载(未完)拦截器Interceptor以及源码解析(未完待续)

package com.atguigu.my.controller;import java.util.Collection;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Contr......

architect刘源源
今天
30
0
[日更-2019.5.24、25、26] Android系统中的Binder通信机制分析(一)--servicemanager

声明 其实对于Android系统Binder通信的机制早就有分析的想法,记得去年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾... 最近,刚好在做...

Captain_小馬佩德罗
昨天
24
0
聊聊dubbo的DataStore

序 本文主要研究一下dubbo的DataStore DataStore dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/store/DataStore.java @SPI("simple")public interface DataStore { ......

go4it
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部