PHP中Restful api 错误提示返回值实现思路


Posted in PHP onApril 12, 2016

RESTful架构是一种流行的互联网软件架构,它结构清晰,符合标准,易于理解,扩展方便。

REST是Representational State Transfer的缩写,翻译为“表现层状态转化”。表现层其实就是资源,因此可以理解为“资源状态转化”。

网络应用上的任何实体都可以看作是一种资源,通过一个URI(统一资源定位符)指向它。

序言

不管是微博还是淘宝,他们都有自己的错误返回值格式规范,以及错误代码说明,这样不但手机端用起来方便,给人的感觉也清晰明了,高大上。遇到问题先找母本,大公司的规范就是我们参照的母本。为此,我仿照了淘宝的错误返回值格式,根据微博错误代码制定的标准自定了自己的错误代码,然后在Restful api 上进行测试。下面我将实现思路以及测试结果分享给大家。

实现思路

我利用抽象工厂模式去实现这样的一个错误返回值。选择这种模式是因为考虑到了这种模式可以提供一个创建一系列相关或相互依赖对象的接口,与我的需求很接近。

代码分析

1、按这个路径common\hint,我新建了个error文件夹存放我的错误提示程序文件。这文件夹中主要有这几个文件:

2、Hint.php入口文件。定义一个抽象类,里边只写一个方法。

interface Hint {
function Error($_errors,$code);
}

3、Template.php 实现Hint这个接口。错误返回值的格式就在这里定义。

class Template implements Hint{
function Error($_errors,$code) { 
if (empty($_errors)) {
print_r(json_encode([]));
} else { 
$errors['error']['name'] = 'Not Found';
$errors['error']['message'] = $_errors;
$errors['error']['error_code'] = $code; 
print_r(json_encode($errors));
}
}
}

4、createMsg.php 再创建一个createMsg抽象类。将对象的创建抽象成一个接口。

interface createMsg { 
function Msg(); 
}

5、用FactoryMsg 类去实现createMsg接口。返回实例化的Template。

class FactoryMsg implements createMsg{
function Msg() {
return new Template;
}
}

6、ErrorMsg.php 给Template里边的Error方法传参。

class ErrorMsg {
// 抽象工厂里的静态方法
public static function Info($_errors) { 
$Factory = new FactoryMsg;
$result = strstr($_errors,Yii::t('yii','Not exist')); //数据不存在 20001
$result1 = strstr($_errors,Yii::t('yii','Null')); //参数不能为空 20002
$result2 = strstr($_errors,Yii::t('yii','Fail')); //新增、更新、删除失败 20003
$result3 = strstr($_errors,Yii::t('yii','Not right')); //XX不正确 20004
$result4 = strstr($_errors,Yii::t('yii','Robc')); //XX无权限 20005
//数据不存在 20001
if(!empty($result)){ 
$M = $Factory->Msg();
$M->Error($_errors,'20001');die;
}
//参数不能为空 20002
if(!empty($result1)){ 
$M = $Factory->Msg();
$M->Error($_errors,'20002');die;
}
//新增、更新、删除失败 20003
if(!empty($result2)){ 
$M = $Factory->Msg();
$M->Error($_errors,'20003');die;
}
//XX不正确 20004
if(!empty($result3)){ 
$M = $Factory->Msg();
$M->Error($_errors,'20004');die;
}
//XX无权限 20005
if(!empty($result4)){ 
$M = $Factory->Msg();
$M->Error($_errors,'20005');die;
}
//默认类型 21000
$M = $Factory->Msg();
$M->Error($_errors,'21000');
}
}

7、调用方式。

use common\hint\error\ErrorMsg;
ErrorMsg::Info(Yii::t('yii','failure'));

8、测试结果。

{
"error": {
"name": "Not Found",
"message": "操作失败",
"error_code": "20003"
}
}

完成。整个实现过程我采用语言包的形式,这样有利于后期多语言的切换。

常见问题

1、采用这种字符串模糊搜索很泛,无法达到具体错误类型返回对应具体代码的要求。如有更好的建议,欢迎大家提议。

$result = strstr($_errors,Yii::t('yii','Not exist'));

2、实现过程中没有考虑到今后多语言切换的问题,然后直接用传统的方式传提示语。比如:ErrorMsg::Info("操作失败");这样是无法实现多语言切换的。建议大家用语言包的方式传参。

PHP 相关文章推荐
一个没有MYSQL数据库支持的简易留言本的编写
Oct 09 PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
Jun 28 PHP
php cli模式学习(PHP命令行模式)
Jun 03 PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 PHP
Apache启动报错No space left on device: AH00023该怎么解决
Oct 16 PHP
PHP5.5迭代生成器用法实例详解
Mar 16 PHP
PHP请求远程地址设置超时时间的解决方法
Oct 29 PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
Nov 20 PHP
laravel框架中视图的基本使用方法分析
Nov 23 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 #PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 #PHP
PHP实现的浏览器检查类
Apr 11 #PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 #PHP
PHP模板引擎Smarty内建函数详解
Apr 11 #PHP
PHP模板引擎Smarty内置变量调解器用法详解
Apr 11 #PHP
PHP模板引擎Smarty自定义变量调解器用法
Apr 11 #PHP
You might like
php 远程图片保存到本地的函数类
2008/12/08 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
基于header的一些常用指令详解
2013/06/06 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
2020/07/17 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
python随机生成库faker库api实例详解
2019/11/28 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
Python3监控疫情的完整代码
2020/02/20 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
如何基于Python和Flask编写Prometheus监控
2020/11/25 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
人事专员岗位职责
2013/11/20 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
学生偷窃检讨书
2014/09/25 职场文书
初中学生操行评语
2014/12/26 职场文书
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android
Python字典的基础操作
2021/11/01 Python
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL