如何写好接口

  1. 目的:清楚明白所写接口的用途
  2. 安全性:做好接口的安全性,防止接口数据泄露,做好必要的参数加密措施
  3. 按需分配: 接受值和返回值要实用,不接受和返回不需要的数据,返回值返回什么应与使用者时时沟通
  4. 规范性:参数命名规范有意义,让使用者一目了然;返回值要包含调用接口状态信息,返回数据格式最好使用JSON
  5. 日志:写接口调用日志,方便查到接口调用错误,实现监控和对接快捷

接口安全性与规范性参考

/**
* 用户登录接口
* 请求方式:post
* 接受参数:
* @param $mobile 用户名 -- 可逆 通过 urlencode(base64_encode()) 加密
* @param $pwd 加密密码 -- 可逆,同时定义一个加密规则
* return json
* {"code":int,"message":string,"data":array}
* 注意事项:
*
*/
public function login() {
$mobile = isset($_POST['mobile']) ? base64_decode(urldecode(escapeQuotes($_POST['mobile']))) : '';
$pwd = isset($_POST['pwd']) ? escapeQuotes($_POST['pwd']) : '';
$totp = isset($_POST['ttoken']) ? escapeQuotes($_POST['ttoken']) : '';
$commonmodel = self::getModel('common');
try {
// 检查参数
$commonmodel->checkRight($mobile, 'mobile');
$commonmodel->checkRight($pwd, 'pwd');
$commonmodel->checkRight($totp, 'ttoken');
// 验证登录
$usersmodel = self::getModel('users');
$res = $usersmodel->userLogin($mobile, $pwd);
} catch (Exception $e) {
$res = array(
'code' => 10000,
'message' => $e->getMessage()
);
}
// 写入接口日志
$des = "IP:" . getIp() . ";请求用户登录接口;返回:" . $res['message'];
$commonmodel->logResult('10001', $res['code'], $des); echo json_encode($res);
}

接受的参数,比如用户名和密码都进行了加密处理,密码可以定义一个更安全的加密规则,抓包查看请求参数也不会暴露用户数据。

调用接口写好接口日志,记录调用什么接口,返回状态码,接口返回详情等等。。。

返回值参考

{
code:0,
message: "success",
data: { key1: value1, key2: value2, ... }
}
  • code: 返回状态码,1表示成功,非1表示各种不同的错误,10000可以用来表示客户端传参错误
  • message: 描述信息,成功时为”success”,错误时则是错误信息
  • data: 成功时返回的数据,类型为对象或数组

不同错误就要定义不同的返回状态码,这里举个例子:

状态码表

返回值 说明 
10000 执行异常,一般为客户端传参出错 
10001 用户不存在 
10002 密码错误 
10003 用户状态未激活 
10004 redis保存值错误 
10005 令牌(token)错误 
10006 二维码序列错误 
10007 验票错误 
1 验证成功,返回需要信息

10000可以定义为客户端传入的参数有错,直接抛出异常,区别客户端与服务端之间的错误

本文转载至:http://blog.csdn.net/xwh670570759/article/details/52130585

【转载】php如何给APP端写接口的更多相关文章

  1. java为移动端写接口

    java作为一门后端语言,其厉害之处在于web,大家比较熟知的各种网络应用,java都能做,那么在这个移动优先的时代,如何继续发挥java的强大呢.通常是让java作为一个app的服务端,为app客户 ...

  2. PC端写的API接口和手机端APP联合调试

    一.遇到问题的情况:项目框架:asp.net MVC5 ,写的给手机端调用的API接口. 二.自己在本地 IIS上部署项目,在手机端的请求服务器上把地址和端口换上本地部署的,如图所示 三.用管理员的身 ...

  3. 用yii2给app写接口(下)

    上一节里我们讲了如何用Yii2搭建一个能够给App提供数据的API后台应用程序.那么今天我们就来探讨下授权认证和通过API接口向服务器提交数据以及如何控制API接口返回那些数据,不能返回那些数据. 授 ...

  4. 客服端与服务端APP支付宝支付接口联调的那些坑

    根据支付宝官方提供的文档的建议: TIPS:这一步应在商户服务端完成,商户服务端直接将组装和签名后的请求串orderString传给客户端,客户端直接传给SDK发起请求.文档和Demo是为了示例效果在 ...

  5. 利用缓存实现APP端与服务器接口交互的Session控制

    与传统B/S模式的Web系统不同,移动端APP与服务器之间的接口交互一般是C/S模式,这种情况下如果涉及到用户登录的话,就不能像Web系统那样依赖于Web容器来管理Session了,因为APP每发一次 ...

  6. 移动端API接口优化的术和结果

    最近一直在忙工作的事情,所以文章写得有些少. 有3-5篇文章都是写到一半然后被别的事情给打断了,所以,我得找个时间好好补补. 最近一直在关注移动端接口API的可用性问题,在移动时代这个做这个优化能产生 ...

  7. OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例

    转自:  http://blog.csdn.net/yanzi1225627/article/details/16917961 开发环境:windows+ADT Bundle+CDT+OpenCV-2 ...

  8. 一个APP页面一个接口

    目前所在的公司做的是健康产业方面的APP,这个产品包括了安卓和IOS还有web三方面,除了要写后台管理的系统外,还要写移动端的接口.第一次写移动端接口就犯了一个错误,以为和web一样是怎么方便怎么来, ...

  9. node+pm2+express+mysql+sequelize来搭建网站和写接口

    前面的话:在这里已经提到了安装node的方法,node是自带npm的.我在技术中会用es6去编写,然后下面会分别介绍node.pm2.express.mysql.sequelize.有少部分是摘抄大佬 ...

随机推荐

  1. 博雅PHP高级工程师面试题-自拟

    作者:元如枫   2010年 1.现有学校课程内容系统简单需求描述,试着提供解决方案. 需求简单描述如下: 1)对象及属性 学校: 学校名称,学校所属分类,学校介绍,学校地图标记,学校所属地区,标签, ...

  2. C++输出上三角/下三角/菱形/杨辉三角形

    1.输出上三角形 第一行1个星,第二行3个星,第三行5个星,第四行7个星,第五行9个星. 分析:三角形的形状由输出的空白和星组成,通过分析每一行输出几个空格,几个星,就可完成输出三角形的工作. #in ...

  3. WPF: 使用CommandManager.InvalidateRequerySuggested手动更新Command状态

    WPF判断命令(Command)是否能够执行是通过ICommand.CanExecute事件,在实际程序中路由命令一般是通过CommandBinding来使命令得到实际操作代码,但是这个CanExec ...

  4. Effective C++:条款29:为“异常安全”而努力是值得的

    (一)先看以下这些代码: class PrettyMenu { public: void changeBackground(istream& imgSrc); private: Mutex m ...

  5. Appium+python自动化13-native和webview切换

    前言 现在大部分app都是混合式的native+webview,对应native上的元素通过uiautomatorviewer很容易定位到,webview上的元素就无法识别了. 一.识别webview ...

  6. 使用maven的profile切换项目各环境的参数

    Java后端开发经常需要面对管理多套环境,一般有三种环境:开发,测试,生产. 各个环境之间的参数各不相同,比如MySQL.Redis等不同环境的host不一样,若每个环境都手动替换环境很容易出错,Ma ...

  7. log4net 自定义Appender

    最近有个需求,使用log4net来记录日志,然后将数据保存到服务器端.一开始打算写一个windows service,定期上传日志. 后来又因为一些场景下不适应,因此直接改为保存内存中,到一定阀值之后 ...

  8. (转载)uCOS-II的嵌入式串口通信模块设计

    在嵌入式应用中,使用RTOS的主要原因是为了提高系统的可靠性,其次是提高开发效率.缩短开发周期.uCOS-II是一个占先式实时多任务内核,使用对象是嵌入式系统,对源代码适当裁减,很容易移植到8~32位 ...

  9. 如何更换Office 2013的product key?

    第一步 第二步 第三步 ... ... ... ... ^_^   参考资料 ======================== Change Product Key Office 2013 Home ...

  10. 弹性方框模型 (Flexible Box Model) 快速入门

    简介 我可以肯定,您对于页面上水平或垂直排列的样式元素已经了解得够多了.但是,CSS 还缺少适用于此任务的合适机制.了解 CSS3 弹性方框模型(简称 Flexbox) 该草案将 Flexbox 描述 ...