thinkphp在app接口开发过程中的通讯数据的封装

在为app开发接口过程中,我们必不可少的要为app前端工程师们提供返回的数据,如何灵活快速又易懂的返回他们需要的数据是非常关键的。

其实thinkphp已经把很多我们要用到的都写出来了,我们只需要稍作修改即可灵活的返回我们需要的数据。

首先,修改Thinkphp/Library/Controller.class.php  在其中增加一个函数 apiReturn();

 /**
 * [apiReturn 用于给app提供接口使用 带有请求结果状态表示,和结果提示,默认返回json]
 * @param  [number] $status  [请求结果的状态标识,设定后要在文档中给予说明]
 * @param  string $message [请求结果的提示语句]
 * @param  [array] $data    [请求返回的数据,app前端需要的数据]
 * @param  [string] $type    [要返回的数据类型,支持json,xml,默认返回json]
 * @return [json或xml]          [返回数据]
 */
    protected function apiReturn($status,$message=‘‘,$data,$type){

        if(!is_numeric($status) || !is_string($message) ){
            $this->apiReturn(‘400‘,‘参数错误‘);
        }
        $res = array();
        $res[‘status‘] = $status;
        $res[‘message‘] = $message;
        $res[‘data‘] = $data;

        if(in_array($type, array(‘json‘,‘xml‘))){
            $this->ajaxReturn($res,$type);
        }else{
            $this->ajaxReturn($res);
        }

    }

增加了这样一个函数后,我们就可以很轻松的在任意控制器下使用了

举个例子 在thinkphp的Home分组下的Index控制器里我们新增一个test方法

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
        $this->show(‘<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p><br/>[ 您现在访问的是Home模块的Index控制器 ]</div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>‘,‘utf-8‘);
    }
    public function  test(){
        $data = array(
            ‘id‘=>2,
            ‘username‘=>‘明之暗夜‘,
            ‘info‘=>array(‘age‘=>24,‘address‘=>‘学府路‘,‘url‘=>‘http://cnblogs.com/dmm888‘)
        );
        if($data){
            $this->apiReturn(200,‘读取用户信息成功‘,$data);
        }
    }

}

在浏览器访问这个接口时可以看到返回的信息

{"status":200,"message":"\u8bfb\u53d6\u7528\u6237\u4fe1\u606f\u6210\u529f","data":{"id":2,"username":"\u660e\u4e4b\u6697\u591c","info":{"age":24,"address":"\u5b66\u5e9c\u8def","url":"http:\/\/cnblogs.com\/dmm888"}}}

这里的数字200可以自定义的 但是我们要在接口说明文档中给予说明。

要返回xml只要在后面添加参数就可以

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
        $this->show(‘<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p><br/>[ 您现在访问的是Home模块的Index控制器 ]</div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>‘,‘utf-8‘);
    }
    public function  test(){
        $data = array(
            ‘id‘=>2,
            ‘username‘=>‘明之暗夜‘,
            ‘info‘=>array(‘age‘=>24,‘address‘=>‘学府路‘,‘url‘=>‘http://cnblogs.com/dmm888‘)
        );
        if($data){
            $this->apiReturn(200,‘读取用户信息成功‘,$data,xml);
        }
    }

}

返回的数据如下

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<think>
<status>200</status>
<message>读取用户信息成功</message>
<data>
<id>2</id>
<username>明之暗夜</username>
<info>
<age>24</age>
<address>学府路</address>
<url>http://cnblogs.com/dmm888</url>
</info>
</data>
</think>

还有很多可以拓展的 就不一一列举了  如果有什么好的意见可以直接给我提

时间: 2024-09-30 08:31:58

thinkphp在app接口开发过程中的通讯数据的封装的相关文章

thinkphp在app接口开发过程中的通讯安全认证

对于我们写好的接口,如果不经过安全认证就可以直接访问的话,则将对我们网站产生非常大的安全隐患,一些hack可能直接用你的接口去操作数据库,后果无法估量.那么如何才能进行有效的安全验证呢? 这里我采用了微信开发中的access_token机制,让app前端开发工程师通过提交appid和appsecert来获取token,服务器端对token缓存7200秒,客户端如果每次都直接请求token则token每次都会重置,所以推荐客户端也一样进行缓存,客户端可以通过判断本地token是否存在,如果存在则直

struts中的请求数据自动封装

Struts 2框架会将表单的参数以同名的方式设置给对应Action的属性中.该工作主要是由Parameters拦截器做的.而该拦截器中已经自动的实现了String到基本数据类型之间的转换工作.在struts中,默认使用拦截器 <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/> 进行请求数据自动封装,它会JSP中提交的

面向服务(接口)开发过程中常用的实体类数据复制解决方案

现在面向服务开发基本已经成为B\S.C\S开发必不可少的概念了,之前做过一个WCF服务,在Web端以MVC开发模式去调用这个服务,其中就涉及到了实体类数据的复制,因为Server端的Model和MVC中的Model从理论上说作用域不同,所以当你获取服务返回的数据时,你需要使用实体类去装载这些数据.大致是这样实现的,在Web端声明一个function,(不需要反射,也不需要深克隆)给两个参数,一个是源对象,一个是目标对象.好了接下来有个问题,有时实体类中会有静态字段,所以也得去处理这个静态字段的数

小蚂蚁学习APP接口开发(1)—— json方式封装通信接口

前段时间,和公司的一个安卓程序员配合开发一款简单的APP,因为第一次写,时间也紧张,总感觉写的不是那么的完美,趁着这段时间好好总结一下经验. 对于APP的请求,服务器返回的数据类型一般是json和xml. xml和json的区别: 可读性方面--xml占优.因为它是有很多个节点组成的,节点的名称可以自定义. 生成数据方面--json占优.在PHP中要生成一条json数据,只需要一个内置函数就可以实现,而xml则需要拼接字符串或者实例化对象才能够实现,所以,json更为简便一些. 传输速度方面--

Java中导出Excel数据,封装Bean

在Java中封装导出Excel数据的总体思路为: 1.导出,根据查询得到的数据(一般我们页面上用的是查询条件带分页的),我们需要把查询条件带到后台重新查询,并且是查询全部数据,不带分页 2.不能用ajax异步提交.应该用location.href=""的方式,把处理的流交给浏览器来处理,JS无法处理流计算. 3.封装统一的Bean实体,主要输入导出的列名,excel名,数据集即可导出. 用到的Maven地址: <!-- poi --> <dependency>

关于APP接口设计(转)

最近一段时间一直在做APP接口,总结一下APP接口开发过程中的注意事项: 1.效率:接口访问速度 APP有别于WEB服务,对服务器端要求是比较严格的,在移动端有限的带宽条件下,要求接口响应速度要快,所有在开发过程中尽量选择效率高的框架,PHP建议使用YAF框架. 2.数据格式 最好使用JSON格式数据,因为JSON有较好的跨平台性.对于 3.数据量 按需分配,APP客户端需要什么数据就返回什么数据,过多的数据量影响处理速度,最重要的是影响传输效率. 4.接口.参数命名准确 无论是接口还是参数,命

关于APP接口设计

最近一段时间一直在做APP接口,总结一下APP接口开发过程中的注意事项: 1.效率:接口访问速度 APP有别于WEB服务,对服务器端要求是比较严格的,在移动端有限的带宽条件下,要求接口响应速度要快,所有在开发过程中尽量选择效率高的框架,PHP建议使用YAF框架. 2.数据格式 最好使用JSON格式数据,因为JSON有较好的跨平台性.对于 3.数据量 按需分配,APP客户端需要什么数据就返回什么数据,过多的数据量影响处理速度,最重要的是影响传输效率. 4.接口.参数命名准确 无论是接口还是参数,命

厦门App开发过程中应该避免的错误有哪些?

无论是在工作,还是在跑步.阅读,与朋友聚会.在微博上闲逛,App软件都是无所不在.App软件开发营销成本低,精准度高,用户粘合性强,不管是建立品牌形象的App,还是服务于具体活动的App,越来越多人重视app在品牌营销中的运用.移动互联网的兴起使个性更加凸显,用户对app的体验要求也更高,厦门app开发过程中,即使一个小错误都可能导致用户抛弃App.因此,在进行厦门app开发中应该注意避免一些错误. 1.APP设计之前没有理清使用流程.设计师设计APP的过程需要理清相关的使用流程.一款APP设计

短视频app开发过程中需要注意的细节

短视频相比较传统的文字.图片宣传而言,更加具有趣味性,传播范围广,又因为其内容短小精悍去又不失价值和意义,深受投资者的喜爱,无数商家也加入到短视频APP开发的行业中来.那今天拓幻科技分享一下,短视频APP开发过程中都是有哪些需要注意的呢?一.视频特效和素材视频特效是给短视频增加美颜特效和不同的贴纸图案,让短视频更加具有趣味性,让用户乐于去观看并进行传播,这样的短视频更容易吸引他人的注意.这也是短视频区别于传统视频之处,这个时代传统的视频已经不太能吸引用户的注意了,就连看电影也要追求"好莱坞大片&