大概你会说,现在APP这么泛滥,谁还不会写个做事端API接口程序啊?是的,大概,你是对的,但是本文想解释的和要讲的故事,是一个从零到一故事,是一个思想,是一个进程,一个可以推演的过程!
在给出答案之前,先抛几个问题,如果你自认为这些方面都做得很精良,那么恭喜你,你已经是牛人了!
请于文后留下你的箴言以供借鉴,多谢!
如果你觉得还有待提高的,可以考试测验在这里找找答案,不谢!
(注:本人利用PHP措辞进行开拓,但这不主要)
若何确定访问来路是正常的,或者说你若何管理访问权限?(附:若何获取通报过来的参数)有加密办法吗?https ? 是否有区分不同场合?若何办理编码问题?若何掌握接口版本迭代问题?上传文件若何处理?若何防止注入?(如果你也没有用框架)若何提升访问速率?若何提高并发?
好,看完问题,让我们连续故事!

前编:公司是一个小公司,刚成立不久,技能职员也很少,险些是一个人卖力一个项目,如web前端,web后端,安卓端、IOS端。很明显,我的任务是,做事器端接口的供应!
(那里的我,履历也是可怜的)
1、采取什么样的做事器进行供应做事(大概不太准确)?如:soap server ? yar server ? restful ?
供应做事办法,之以是会想到用这几个东西供应做事,是由于,我用的便是PHP开拓啊。PHP里就有这些东西,以是,很自然的嘛,soap,yar这两个东西在PHP与PHP程序之间的通信的确是不错的。但是,你要移动端对接,不止安卓,不止IOS。以是,只能国际化了呗!
采取restful架构,实在说白了,也便是一个地址,就可以进行操作了,放心吧,大家都是这么干的,准没错!
(附:请考虑供应接口只是进行数据的操作,倒底有没有必要去利用一个完全的MVC框架)
2、若何确定访问来路是正常的,或者说你若何管理访问权限?
访问权限,为什么会有这个问题呢?如果是自己的网站,那么,你所访问的地址,便是你自己供应的,根本不须要什么访问权限掌握!
但是,如果对外供应做事,那就得考虑了。来访的人不是内部的怎么办?他登录了没有?现在有多少人在访问这个做事?这些东西,都该当被一览无余的呈现出来。那么,若何掌握来访职员呢?方法1、在程序里写去世几个密码一类的东西,让客户端访问时,带上此变量以验证;方法2、为每个客户端(我说的是安卓或ios等一套源代码)供应一个appId,appKey,访问时携带,实际上,很多大公司都是这么干的;方法3、利用Oauth等授权办法。很明显,方法2是最好的办法,有了个这个东西,你也可以很方便的进行访问的有效记录!
(实践:建立权限表,建立访问日志表,如有必要,建立模块访问权限表,缺点描述表)
3、有加密办法吗?https ? 是否有区分不同场合?
加密,一样平常供应接口我们都可以采取json办法(方便啊),那便是说,所有的访问,险些都是采取明码传输,那么就必须有一定的假设信息被截获的戒备方法(实际上,这个假设也很随意马虎成立)!
对付一样平常的信息,加一个普通的普通的署名即可,如:appId+appKey+访问参数+timestamp+随机字符n个 再 md5 得到署名,做事器端首先进行该署名验证,确认后,再进行后续操作!
当然,对付支付一类的操作,这样的操作还是显得不足安全的,那就须要分外对待,借助于https的加密,就安全多了!
4、若何办理编码问题?
编码问题,大概许多人看来,这并不是问题。但是我想说的是,PHP写代码真的很方便很随意,md5,json_encode等都措辞自带的函数,但是对付java和swift可能就没那么大略了,还得自己去找别人封装的东西,有时稍有不对就可能导致署名不对,所有访问都无效!
(这里紧张说的是包含中文的地方);我们当时大家采取的都是UTF8的编辑器开拓,以是并没有什么太大问题!
5、若何掌握接口版本迭代问题?
版本迭代,这是个问题!
由于,如果全体网站都是你的,你想怎么改都可以,反正别人访问也就只有你网址这一个入口。但是移动APP不一样了,每个人都是独立的,他们各自的版本都是不一样的。如果共用一套接口的话,小的改动还好,向后兼容就行了,但是对付一些大方向的改动,这将是致命的,要么强行利用户不能利用以匆匆使其更新,要么你连续写一长篇无用的不可掩护的冗余代码!
以是,做好版本掌握是必须的,紧张实现为:传入一个version参数,从而调用不同的内部接口地址,当然,你可以直接接口地址指向另一目录!
这样,就有很多个版本接口共存了!
如 /pro/api/v1.0/xxx, /pro/api/v2.0/xxx
6、上传文件若何处理?
上传文件,这也是问题,由于,其他地方都是采取的文本内容通报至做事器,可以直接进行数据库保存操作,但是,对付上传文件则不一样。如果是网站,则一样平常只能利用Form表单进行提交,而且必须设置属性multipart/form-data,声明为文件类型。那也便是说,不能以普通的json格式提交了!
办理方法有2个,办法1、先将文件以表单形式提交至做事器,做事器返回地址,再将地址组合进其他选项中,一起以json提交!
办法2、全体内容以webForm表单形式提交,此类页面单独处理权限问题,并把稳是否是假造要求,可另加页面隐蔽token验证!
7、若何防止注入?(如果你也没有用框架)
问题7、防止注入,大概作为开拓职员,说这个已经太low,但是我还是忍不住提了,由于,真的很主要,实在,接口要做的事情很大略,接管数据,保存数据,返回状态。以是,至心以为,没必要去用一些很成熟的大型框架,太臃肿!
那么注入问题,就只有你自己办理了。php 利用 mysql_real_escape_string 及 htmlspecialchar进行过滤,基本也就够了!
8、若何提升访问速率?若何提高并发?
接口的访问速率,这个是很主要的。你有没有看到哪个APP访问速率很慢,大家还乐意用他的?做到秒开才是王道,由于各种验证,各种日志记录,已经花费了不少韶光,以是更要把稳效率问题。索引、缓存、负载均衡、分布式,用起来。。。 哈哈,太宽泛了
从最初什么都没有,到末了,一整套接口的完成,大概花了一个多月韶光,觉得还是有很多不OK的地方,再后来准备做推送,做长连接,结果由于某些缘故原由,项目被中断,也就不明晰之了。
写一点当时的过程,就当是一点点的收成吧。还记得,当初开始做的时候,参考资料实在太少,以至于做很多东西,都没有信心,只是凭觉得!
!
希望这篇文章能帮到部分处于这个期间的人!
实在不管是做什么样的开拓,都该当是从核心要办理的问题出发的,当你把问题都办理了之后,大概,一个好的设计好的架构就已经悄然呈现!
这大概便是办理问题之美吧!