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+SqlServer实现分页显示
Oct 09 PHP
火车采集器 免费版使出收费版本功能实现原理
Sep 17 PHP
php实现jQuery扩展函数
Oct 30 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
PHP中echo和print的区别
Aug 28 PHP
PHP输出一个等腰三角形的方法
May 12 PHP
Thinkphp框架开发移动端接口(1)
Aug 18 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
Dec 25 PHP
PHP+JavaScript实现无刷新上传图片
Feb 21 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 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
玩转图像函数库―常见图形操作
2006/09/03 PHP
php session应用实例 登录验证
2009/03/16 PHP
PHP反射实际应用示例
2019/04/03 PHP
推荐dojo学习笔记
2007/03/24 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
Python Tkinter简单布局实例教程
2014/09/03 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
navabi英国:设计师大码女装
2019/06/25 全球购物
金融专业个人的自我评价
2013/10/18 职场文书
保荐人的岗位职责
2013/11/19 职场文书
致200米运动员广播稿
2014/02/06 职场文书
事假请假条范文
2014/04/11 职场文书
售后服务承诺书怎么写
2014/05/21 职场文书
学校食品安全实施方案
2014/06/14 职场文书
高中班主任寄语
2019/06/21 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书
小学四年级作文之写景
2019/08/23 职场文书
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS
asyncio异步编程之Task对象详解
2022/03/13 Python