总结一下API接口开发过程中的注意事项
1、跨平台性
所谓跨平台是指我们的接口要能够支持不同的终端,比如android、ios、windowsphone以及桌面软件、网站等。如:不同的终端每页显示的记录数不同
采用通用的解决方案,比如通信协议就采用最常用的HTTP/RPC协议,如果是即时通信,可以采用开放的XMPP协议,做游戏的可以采用可靠的TCP协议,除非TCP不够用了,再采用定制的UDP协议。数据交换采用xml或者json格式或者webservice等等。总之,要达到的目标就是让不同的端能够很方便的使用你的接口。
function ajaxJson($data, $jsonCallBack = '', $fromCode = "UTF-8") { mb_convert_variables("UTF8", $fromCode, $data); header("Cache-Control: no-cache, no-store, must-revalidate, max-age=-1"); $result['data'] = $data['data']; $result['code'] = isset($data['msg']) ? sprintf('%06s', $result['code']) : "000000"; $result['msg'] = isset($data['msg']) ? $data['msg'] : "sucess"; $outPut = json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); if ('' != $jsonCallBack) { $outPut = $jsonCallBack . '(' . $outPut . ')'; } else { header("Content-Type: application/json; charset=utf-8"); } exit($outPut); } function apiReturn($data, $type = 'JSON') { $args = func_get_args(); if ($args > 2) { // 外部接口调用,有code,msg $info = array(); $info['data'] = $data; $info['code'] = sprintf('%06s', array_pop($args)); $message = array_pop($args); $info['msg'] = ($type == $message) ? "success" : $message; $data = $info; } //内部程序调用 if (strtoupper($type) == 'JSON') { // 返回JSON数据格式到客户端 包含状态信息 header("Content-Type: application/json; charset=utf-8"); exit(json_encode($data)); } elseif (strtoupper($type) == 'XML') { // 返回xml格式数据 header('Content-Type:text/xml; charset=utf-8'); exit(XML::build($data)); } elseif(strtoupper($type) == 'EVAL'){ header('Content-Type:text/html; charset=utf-8'); exit($data); } }
2、良好的响应速度
接口应该以最快的速度将数据返回给请求者,要达到的目标就是快。一个页面,秒开最好,超过三秒就需要找找原因了。数据量按需分配,APP客户端需要什么数据就返回什么数据,过多的数据量影响处理速度,最重要的是影响传输效率
3、接口要为移动客户端考虑
比如,在移动端里,下拉刷新和上拉加载更多是很常见的功能,如果接口仍然按照传统的web思路,只提供按页读取的话,就会造成移动端的额外的数据请求和计算。 这时,接口就应该针对这两种类型的操作提供额外的支持。
4、考虑移动端的网络情况和耗电量
如果让我们说出哪类app比较好,可能还不大好说,但是如果让我们说出哪些app很差,我们肯定会说出那些体积很大、占用内存多、界面很卡、费电的app 不好。对于网络情况,接口应该具备为不同的网络提供不同的内容的能力如果我们能够知道用户的网络情况,只有在wifi的情况下才给用户传输封面图、缩略图 之类的,
是不是可以帮用户节省很多流量呢
5、通用的数据交换格式
目前,对于接口和客户端的数据交换格式,基本上就是三种,xml和json和webservice,而现在使用json的应该占大多数最麻烦的就是处理Date类型,因为JSON本身没有Date类型,因此,JSON库将Date类型的数据序列化时会转为String。这时,不同环境, 不同平台,以及用不同的JSON解析库,转换后的结果经常会不同。比如,你在开发机上可能得到的结果是”2016-1-1 17:11:11”,但放到服务器后结果却变成了“Jan 1,2016 5:11:11 PM” ,客户端进行反序列化时无疑会失败。后来,我取消了所有Date类型,统一采用时间戳表示,就再没有转化的烦恼了。 另外,接口的开发人员有时候会将一些数据错误地转换为了String,导致客户端使用时因类型错误而异常。例如,本来是数字的1,被转成 了"1",客户端做运算时就会出错,或用switch判断时也会出错,或其他无法转换的情况发生时;例如,为空时JSON正确地表示应该是null,但如 果转为了String就变成了"null",那问题就来了,我遇到的因为这个错误的转换导致的程序奔溃已经好几次了,第一次的时候,查了一整天才定位到问题所在
6、接口统计功能
在做PC端网站的时候,我们都会给我们的网站加上个统计功能,要么自己写统计系统,要么使用第三方的比如GA。移动端接口API则需要我们自己实现统计功能,这时就需要我们尽可能多的收集客户端的信息,除了传统的IP、User-Agent之外,还应该收集一些移动 相关的信息,比如手机操作系统,是android还是ios,都是什么版本,用户使用的网络状况,是2G、3G、4G还是WIFI。客户端APP是什么版 本信息。
7、客户端与服务端的肥瘦平衡
在移动开发中,由于客户端的修改会很费时费力,特 别是IOS应用还要经过Apple审核,另外,当前IOS开发人员、Android开发人员的人工成本普遍较高,人才紧缺,基于这两点,能在服务器端实现 的功能就不要放在客户端,毕竟服务器端程序的修改要比客户端方便、灵活、快捷的多。
8、隐式用户与显式用户
显式用户指的是,APP程序中有用户系统,一个username、password正确的合法用户,称之为显式的用户,通常显式用户都需要注册,登录以后能完成一些个人相关的操作。隐式用户指的是,APP程序本身就没有用户系统,或者一个在没有登录的情况下,使用我们APP的用户。在这种情况下,可以通过客户端生成的UDID来标识一个用户。有了用户信息,我们就能够了解不同用户的使用习惯,而不仅仅是全体用户的一个整体的统计信息,有了这些个体的信息之后,就可以做一些用户分群、个性化推荐之类的事情。
9、安全问题
设计API第一个需要考虑的是API的安全机制。我负责的上一个项目,因为API的安全问题,就被人攻击了两次。之后经过分析,主要存在两个漏洞: 一是因为缺少对调用者进行安全验证的方式,二是因为数据传输不够安全。那么,制定API的安全机制,主要就是为了解决这两个问题:- 保证API的调用者是经过自己授权的App;
- 保证数据传输的安全。
相关推荐
API 接口设计规范 API 接口设计规范是一组标准化的规则和约定,旨在规范 API 接口的开发和使用。该规范涵盖了 API 接口的设计、实现、测试和维护等方面,旨在提高 API 接口的质量、可维护性和可扩展性。 API 接口...
### API接口设计文档模板知识点详解 #### 一、概述 API(Application Programming Interface)接口设计文档是软件开发过程中不可或缺的一部分,它为开发者提供了清晰、准确的接口调用指南。一个良好的API文档应包括...
在API接口设计中,安全性和有效性是至关重要的因素。`token`、`timestamp`和`sign`这三者是常见的安全机制,用于确保数据的完整性和防止中间人攻击。下面将详细阐述它们的作用和实现方式。 `Token`,通常指访问令牌...
API接口设计是一项至关重要的任务,因为它直接影响到系统的可扩展性、灵活性和维护性。本资料"api接口设计.rar"可能包含关于如何有效地设计和实现API的详细指南。 首先,API接口设计的基础是明确接口的功能和目标。...
Web-API 接口设计经验总结 在 Web-API 接口设计中,我们需要注意到多个重要的方面,以确保我们的接口设计是安全、可靠和高效的。在本文中,我们将总结 Web-API 接口设计的经验,并提供一些实用的建议和解决方案。 ...
API 接口设计是软件开发中非常重要的一步,它能够帮助开发者快速构建高效、可靠的软件系统。好的 API 接口设计可以提高系统的可维护性、可扩展性和可重用性,从而提高开发效率和降低成本。 什么是 API API...
"API接口设计项目说明指导书" 本文档提供了API接口设计项目的指导书,涵盖了项目的编写目标、背景、定义、参考资料、综述、统一输入输出参数、用户接口、优惠券接口等方面的内容。 一、编写目标 本指导书的编写...
完整word版-API接口设计说明书 本文档提供了一个完整的 API 接口设计说明书,旨在为开发者和使用者提供详细的接口设计文档。该文档涵盖了 API 的设计理念、统一的输入输出参数、错误返回码列表、用户接口、优惠券...
Web API 接口设计经验总结 在 Web API 接口的开发过程中,我们可能会碰到各种各样的问题,本篇随笔总结了 Web API 接口设计经验,希望对大家有所帮助。 1、在接口定义中确定 MVC 的 GET 或者 POST 方式 在 Web ...
API接口设计说明书 本文档旨在详细介绍XX API接口设计说明书的内容,涵盖了接口设计的目的、背景、定义、参考资料、综述、统一的输入输出参数、错误返回码列表、用户接口等多方面的内容。 编写目的: 本文档的目的...
### Python技术进行API接口设计的关键知识点 #### 一、引言 随着互联网技术的飞速进步及大数据时代的来临,API接口设计已经成为网络应用开发中一个不可或缺的部分。Python,以其高效、简洁、强大的特性,在Web开发...
**XX API接口设计说明书** **引言** 本API接口设计说明书的目的是为开发者提供一个清晰、详尽的指南,帮助他们理解和使用XX公司的API接口。这份文档是为那些希望集成XX服务到自己的应用或系统中的开发者编写的。...
### API接口设计说明书知识点概述 #### 一、引言 - **编写目的**: 本文档旨在为开发人员提供关于特定API接口的设计规范与使用指南,确保API的一致性与易用性,帮助开发者快速理解并集成接口。 - **背景**: - **...
该项目是一个基于Python的API接口设计源码集合,包含27个文件,包括24个PNG图片文件和2个Markdown文档。此项目旨在为开发者提供全面的API接口设计参考,适用于各种Python开发场景。
该项目是一款基于Python和Shell开发的公开API接口设计源码,包含22个文件,涵盖6个Python脚本、5个Markdown文档、3个PNG图表、3个YAML配置文件、1个Git属性文件、1个Git忽略文件、1个开源协议文件、1个Shell脚本、1...
.Web API接口设计经验总结.docx
.Web API接口设计经验总结.pdf