如何写好接口

  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 -- 页面传值的6种获取方法

    1.PHP4以后获取传值的方法 一般在页面中传值常见的是POST.GET和COOKIE几种,所以下面我也主要介绍这几种.PHP4以后都采用的是$_POST.$_GET等数组来获取网页传值.在PHP3. ...

  2. [转]Android Service完全解析,关于服务你所需知道的一切

      目录(?)[+] Android Service完全解析,关于服务你所需知道的一切(上) 分类: Android疑难解析2013-10-31 08:10 6451人阅读 评论(39) 收藏 举报 ...

  3. leetcode187. Repeated DNA Sequences

    https://leetcode.com/problems/repeated-dna-sequences/#/description   https://leetcode.com/problems/r ...

  4. GridView Item 大小可能不一样,如何保持同一行的Item 高度大小相同,且GridView高度自适应!

    昨天用到GridView,但是遇到几个问题,就是GridView默认的item其实大小是一致的,但是我们经常会遇到item大小不同,系统默认会留白的问题,很头疼!如下图这样的:      就会造成,右 ...

  5. .NET Versioning and Multi-Targeting - .NET 4.5 is an in-place upgrade to .NET 4.0

    Say what you will about the past ridiculousness of .NET Framework versioning, since the confusion of ...

  6. CocoaAsyncSocket 与 Java服务 交互

    注意:向客户端写数据时最后需要加上\n,不然很久都不会得到服务端的返回. 上面为普通的socket服务端,最近项目采用apache mina框架建后台的socket服务端,采用上面的asyncSock ...

  7. .NET:CLR via C# The CLR’s Execution Model

    The CLR’s Execution Model The core features of the CLR memory management. assembly loading. security ...

  8. python接口自动化9-https请求(SSL)

    前言 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会报:requests.exceptions.SSLError: [S ...

  9. 海思hi3518 移植live555 实现H264的RTSP播放

    用海思的交叉编译工具交叉编译live555 ,结合海思例子venc中的H264部分,完成RTSP的视频数据发布. 用vlc可以播放,但是实时性比较差,慢了5秒

  10. TYVJ-P1864 守卫者的挑战 题解

    P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜 ...