服务端接口中的那些坑

TOP1:版本意识与兼容性问题。 

对于一个好的程序员来说,思考的时间>=写代码的时间,如果思路不对写的代码越多,错的也越多,任何时候思考是保证高效工作最省事的武器。

对于接口开发,不同于bs项目,服务器端一更新,所有问题都解决了,大家访问都是最新的程序,不存在任何版本的问题;但接口开不同,因为你开发接口有是被不同的客户端版本访问的,比如app的接口,app版本有很多个。这个时候问题来了,如果中途我调整了数据库多加了字段,新app用户请求的时候带了这个字段,插入和修改都不会存在任何问题,但老客户端呢,如果此时你及没有把新旧接口分离,也没判空除了新的字段,那么你的程序就会报错,插入到数据库就会有问题,你的旧app请求就会出问题。

所以开发接口的第1要诀:所有的方法升级必须考虑老用户的兼容性问题。

TOP2:用户权限验证。

  安全是一个系统之所以生存的根基,如果做任何程序不考虑安全问题,那么他的程序一定是糟糕的,一定的失败的。

设想这样一个情景,我在开发一个修改用户资料接口的时候,只需要使用用户的id和要修改的资料就够了吗?当然不够,如果只根据用户的id就修改资料的话,那么非法的用户就拥有了修改所有的用户资料的权利,只要id传对,这是多么可怕的事情。

所以开发接口第2要诀:在修改和查看任何私有资料的时候,先用令牌验证用户的有效性,证明你是你自己了才能进行关键性的操作,这个步骤在接口这里是永远不能省略的

TOP3:在for循环中嵌套查询。

性能问题是一个程序好坏最直观的体现,也是验证一个程序员最直接的方式,在这里呢我要强调一件事,就是不要在for循环里面嵌套查询。因为大家都知道对于服务器来说,最可能造成资源瓶颈的地方就是数据库,所以数据库资源也就是最昂贵的资源。

设想一个这样的情景,如果现在有1w个经销商,每个经销商有多个经验产品,他们是通过中间表进行关联的,我现在要查询每个经销商的产品数据组成一个对象返回给app,最直观的做法是什么?就是我for 1w次去查询经销商的产品,然后组成一个数据,那么这样做造成的结果是什么,你会查询至少1w次数据,那么有没有办法解决这个问题,当然,你可以把所有经营产品查出来,放到内存中然后每次从内存中去取经营产品就可以了,这样就把1w次的查询变成了1次。

所以开发接口第3要诀:不要在for循环中查询数据库。

时间: 2024-08-26 12:39:56

服务端接口中的那些坑的相关文章

移动端与PHP服务端接口通信流程设计(增强版)

增强地方一: 再增加2张表,一个接口表,一个授权表,设计参考如下: 接口表 字段名 字段类型 注释 api_id int 接口ID api_name varchar(120) 接口名,以"/"作为分割线,如 blog/Index/addBlog api_domain varchar(256) 所属领域 is_enabled tinyint(1) 是否可用  1:可用 0:不可用 add_time int 添加时间(戳) (注:只列出了核心字段,其它的再扩展吧!!!) 授权表 字段名 字

api服务端接口安全性解析针对

针对 --->非开放性平台 --->公司内部产品 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效: 2.因为是非开放性的,所以OAuth那套协议是行不通的,因为没有中间用户的授权过程: 3.有点接口需要用户登录才能访问: 4.有点接口不需要用户登录就可访问: 针对以上特点,移动端与服务端的通信就需要2把钥匙,即2个token.第一个token是针对接口的(api_token):第二个token是针对用户的(user_token): 先说第一个token(

api服务端接口安全

api服务端接口安全性解析 http://blog.csdn.net/tenfyguo/article/details/8225279 常用的基于token的实现方案 http://blog.csdn.net/tenfyguo/article/details/8225279 token常常用在各种应用中,如下场景: 1,用户输入密码和帐号后,系统进行验证后,生成一个session,分配一个sessionid给使用者,后续服务使用者就无需每次都输入密码和验证密码了,只需把对应的帐户和session

安卓使用Socket发送中文,C语言服务端接收乱码问题解决方案

今天用安卓通过Socket发送数据到电脑上使用C语言写的服务端,发送英文没有问题,可当把数据改变成中文时,服务端接收到的数据确是乱码. 突然想到,VS的预处理使用的是ANSI编码,而安卓网络数据都是UTF8格式的,这样直接使用printf打印出出来的当然是乱码,所以解决方法就是把UFT8格式的数据转换成ANSI! 避免大家遇到类似问题,少走弯路,我现在把自己找的转码函数贴出来! C语言文字编码转换函数: //UTF8转成Unicode wchar_t * UTF8ToUnicode( const

android 上传文件用php程序在服务端接受(一)

php服务端接受程序..file_up.php. <?php /* require_once('lib/session_config.php'); require_once('lib/flydc.php'); require_once('lib/common.php'); require_once('config.php'); */ //header("content-Type:text/html;charset=UTF-8"); // var_dump($_SERVER['HT

传统行业转型微服务的挖坑与填坑

原文:传统行业转型微服务的挖坑与填坑 一.微服务落地是一个复杂问题,牵扯到IT架构,应用架构,组织架构多个方面 在多家传统行业的企业走访和落地了微服务之后,发现落地微服务是一个非常复杂的问题,甚至都不完全是技术问题. 当时想微服务既然是改造应用,做微服务治理,类似注册,发现,熔断,限流,降级等,当然应该从应用开发组切入,一般一开始聊的会比较开心,从单体架构,到SOA,再到微服务架构,从Dubbo聊到SpringCloud,但是必然会涉及到微服务的发布和运维问题,涉及到DevOps和容器层,这些都

创建windows服务遇到的几个坑

遇到的几个坑: 1.在安装服务的时候路径不对,程序是默认放到vs的project中的,但是路径中有空格,错误. 解决方法把debug文件夹整个copy到盘的跟目录下就可以了. 2.生成的时候最好用32位,我用64位总是失败,原因不明,我的机子是64位的. 3.添加安装程序一定要修改几个属性—— 3.1. 设置serviceInstaller1组件的属性:     1) ServiceName = My Sample Service    2) StartType = Automatic 3.2.

手机app服务端接口开发启示随手记1

第一个情景,原来登录注册更新用户资料是分开的3个接口,那么容易想到的是注册之后不更新资料,但是又登录了的(修改资料当然需要登录).根据墨菲定律,凡是可能会出问题的地方则迟早出现问题.果然产品上线3个月后数据库出现了几百条仅仅注册但是没有更新资料但登录了的用户.更要命的是,这些用户的资料随着一些业务逻辑线进入了solr,污染了附近用户相关的业务的数据导致周围的人以及查询出现空白资料的用户. 第二个情景,因为用户编辑广播消息或者图文资料的时候对图文的存储没有依照惯例进行处理也就是text中插入标记,

一个关于UDP socket服务端接收长度不正确的问题

最近项目需要实现一个通过UDP协议和远端服务平台通讯的需求,简要描述如下: 本端为嵌入式linux路由器(udp客户端,linux C编码),远端为租用的阿里云服务器(udp服务端,java编码), 通信协议为UDP,本端会定时向远端服务器发送消息. 在实现和调试过程中发现一个问题: 1)将远端服务程序放在实验室pc机上调试没有问题,即"路由器-PC"交互正常. 2)将远端服务程序放至阿里云服务器上运行,结果服务端收到的udp消息会多出4个字节,偶尔还会多出6个,多出的字节是 EF B