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 相关文章推荐
一些常用的php简单命令代码集锦
Sep 24 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
Jun 13 PHP
PHP sprintf() 函数的应用(定义和用法)
Jun 29 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 PHP
php将字符串转换成16进制的方法
Mar 17 PHP
PHP中你应该知道的require()文件包含的正确用法
Jun 12 PHP
PHP导入导出Excel代码
Jul 07 PHP
PHP实现简单汉字验证码
Jul 28 PHP
PHP 闭包详解及实例代码
Sep 28 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
Apr 27 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引用返回与取消引用的详解
2013/06/08 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
javascript检测两个数组是否相似
2015/05/19 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
[45:06]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第二场 11.28
2020/12/02 DOTA
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
python socket 超时设置 errno 10054
2014/07/01 Python
Python批量按比例缩小图片脚本分享
2015/05/21 Python
快速入门python学习笔记
2017/12/06 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
校友会欢迎辞
2014/01/13 职场文书
青春演讲稿范文
2014/05/08 职场文书
低碳环保口号
2014/06/12 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
大专护理专业自荐信
2015/03/25 职场文书
python实现简易自习室座位预约系统
2021/06/30 Python
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript
详解Oracle块修改跟踪功能
2021/11/07 Oracle