codecamp

小技巧和浅谈API适用范围以及入门篇总结

PHALAPI-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)

前言

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

本篇文章的目的在于把框架自带的一些好用,封装好的一些方便开发的类库简单的说一下,灵活使用可以提高开发效率,再就是因为在交流过程中有很多童鞋提出了一些关于什么样的项目怎么用API和web端怎么使用API这类的问题,我就我的理解把我的一些想法和大家交流一下,最后是对于入门篇做一下总结,以及对后面的一些教程做一下说明.

附上:

喵了个咪的博客:w-blog.cn

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

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

1. 小技巧

在这里介绍的是一些比较基础是比如curl,log,和tools着一些基础的,关于cache,Cookie等一些会在后面进阶篇慢慢道来

1.1 curl请求类

其实在框架内部已经提供了Curl的请求类位置是在/Phalpi/Phalapi/CUrl.php

// 构造方法接受参数为失败重试次数默认是1可以自己指定
$curl = new PhalApi_CUrl(2);

// 进行GET 返回请求结果
$rs = $curl->get('http://phalapi.oschina.mopaas.com/Public/demo/?service=Default.Index');

// 进行POST 返回请求结果
$data = array('username' => 'dogstar');
$rs = $curl->post('http://phalapi.oschina.mopaas.com/Public/demo/?service=Default.Index', $data);

1.2 log日志类

在大部分时候都没办法实时知道报错信息,但是如果发生了错误我们需要记录起来,来提供给自己日后分析,或者是在运营环境中有个问题但是自己不是很确定可以通过debug日志的形式写入文件进行分析,框架有提供这方面的功能,在接口init.php中已经有下面这段话了

//日志纪录
DI()->logger = new PhalApi_Logger_File(API_ROOT . '/Runtime', 
    PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR);

这样就已经注册了日志类API_ROOT . '/Runtime'这个是表示日志存放的路径(一定要保证有写入权限才能正常使用)使用如下

//error 系统异常类
DI()->logger->error('fail to insert DB', $data);
//对应的LOG
2015-02-07 20:37:55|ERROR|fail to insert DB|{"name":"dogstar","password":"123456"}

//info 业务纪录类
DI()->logger->info('add user exp', array('name' => 'dogstar', 'before' => 10, 'addExp' => 2, 'after' => 12, 'reason' => 'help one more phper'));
//对应的LOG
2015-02-07 20:48:51|INFO|add user exp|{"name":"dogstar","before":10,"addExp":2,"after":12,"reason":"help one more phper"}

//debug 开发调试类
DI()->logger->debug('just for test', array('name' => 'dogstar', 'password' => '******'));
//对应的LOG
2015-02-07 20:37:55|DUBUG|just for test|{"name":"dogstar","password":"******"}

文件存放的文件路径一般为Runtime/log/201502(年月)/20150207(年月日).log

1.3 tool工具类

工具类的路径在/Phalpai/Phalapi/Tool.php中目前里面提供了两个工具(IP地址获取,随机字符串生成)使用方法入下,自己会经常使用的工具都可以放进去

//实例化工具类
$PhalApi_Tool = new PhalApi_Tool();

//生成一个"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"组成的一个随机字符串根据输入的值决定长度
$PhalApi_Tool->createRandStr(5);

//获取请求的IP这里的IP是外网IP
$PhalApi_Tool->getClientIp();

2. 浅谈API适用范围

其实想谈谈这个的原因是应为有人有疑问,Api适用范围是不是只局限于APP,还有就是如果是用 phalapi 提供一个后台管理的web项目的话要怎么去做,在这里根据一些笔者本人的一些肤浅的了解谈一谈我的认为,分一下几个场景进行说明.

2.1 移动端

我认为排在第一位的应该是移动应用比如Android和IOS上面的应用通讯肯定是需要使用到API通讯的(基本上是首选,很少有看到其他非接口形式的).

2.1 提供服务(主要是平台类)

提供服务(主要是平台类)比如银行来说,提供的支付接口,付款接口等,还有就是一些外卖平台,团购平台都有自己的一套接入API接受数据(这一些可能会偏向高端一点)

2.1 长周期web项目

长周期web项目,为什么要叫做长周期web项目,因为短期的项目比如5天的一个抽奖活动我是觉得实在没有必要去做成接口通讯的形式,这种短周期的项目直接拿着静态页面加上MVC框架去实现来的是划算一点(因为API和web通讯成本还是比较大的),对于长周期的项目来说使用API是有好处的如下:

1.前后端分离,后端提供API服务,前端进行请求展示,让前端专注做前端的事情,让后端专注做后端的事情.

2.升级迭代可以有效的减小维护成本,当迭代升级的时候,如果是后端没有变动,只是前端进行变动了可以很好的分开工作量.(前端一样)

3.分离之后规范更加清晰,API有API的一套完整的开发规范,前端也一样,就不会和MVC框架一样代码堆积在一个地方

4.高并发web项目优化目标准确,优化空间大,对于API来说就是可以单点优化.

当前也有他的缺点,前期工作量会有所增加,沟通成本增加,但是我认为他带来的好处是持续的

还有一个重点就是怎么实现通讯,我现在在项目中前端是使用js进行请求通讯的,这是比较常用的,还有一种设想PHP提供接口,然后node.js或者其他语言进行请求然后渲染出html代码给到前端进行展示,这样可以解决安全问题,而且node.js不需要进行数据操作性能也是非常好的.

3. 入门篇总结

经过了一个月交流入门篇也就在这里结束了,在入门篇里面吧一些关于Phalapi的基本使用方式都过了一遍,我也希望大家能动手都操作一遍,当如入门篇讲的是比较基础的东西,经验老到的童鞋过一过就行了,在后面的进阶篇里面跟过的会讲到概念和思想性的东西,比如DI思想单例模式,三层的好处等,而在实战篇中会着重讲解如何运用到实际开发中,怎么多项目共用框架等一些比较实际的一些教程,也希望大家能够进一步关注,再一次感谢喜欢Phalapi框架的你们,你们的关注就是我的动力!

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

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

数据库操作和Model层
三层结构Api,Domain,和Model
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

八、视频教程

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }