服务端接口中的那些坑

简介: TOP1:版本意识与兼容性问题。    对于一个好的程序员来说,思考的时间>=写代码的时间,如果思路不对写的代码越多,错的也越多,任何时候思考是保证高效工作最省事的武器。   对于接口开发,不同于bs项目,服务器端一更新,所有问题都解决了,大家访问都是最新的程序,不存在任何版本的问题;但接口开不同,因为你开发接口有是被不同的客户端版本访问的,比如app的接口,app版本有很多个。

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

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

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

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

 

TOP2:用户权限验证。

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

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

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

 

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

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

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

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

 

img_fa0be433d68c8212b2b0b3b1a564ccb1.png
如果本文对你有所帮助,请打赏——1元就足够感动我:)
支付宝打赏 微信打赏
联系邮箱:intdb@qq.com
我的GitHub: https://github.com/vipstone
关注公众号: img_9bde0f31ac4a0eca10b1bd7414b78faf.png


作者: 王磊
出处: http://vipstone.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,请标明出处。

相关文章
|
7月前
|
网络协议 算法 Linux
服务端如何准备连接
【4月更文挑战第1天】服务端创建套接字涉及`socket()`函数。
|
29天前
|
XML Java Maven
WebService客户端调用的5种常见方式
本文介绍了在Java中创建和调用WebService的方法,包括服务端的搭建、配置类的添加以及客户端的多种调用方式(如使用JDK原生代码、wsimport命令、动态调用、代理工厂及HttpClient)。文中详细展示了每种方法的实现步骤和示例代码,强调了服务端与客户端参数实体类字段的兼容性,并推荐使用代理工厂方式进行调用。
WebService客户端调用的5种常见方式
|
7月前
|
消息中间件 算法 Java
客户端限流器和服务端API限流器的区别
客户端限流器和服务端API限流器在限流对象、实现方式以及应用场景等方面存在显著差异。客户端限流器主要关注于保护客户端资源和控制客户端行为,而服务端API限流器则更注重于保护服务端系统和确保服务的高可用性。
92 3
|
7月前
|
XML JSON 网络协议
RPC远程服务如何调用
【2月更文挑战第12天】一个完整的 RPC 调用框架包括:通信框架、通信协议、序列化和反序列化三部分。
|
7月前
|
存储 JSON 监控
源码分析Zabbix客户端如何向服务端发起请求
源码分析Zabbix客户端如何向服务端发起请求
80 2
|
网络协议 算法 Java
gRPC 客户端调用服务端需要连接池吗?
gRPC 客户端调用服务端需要连接池吗?
|
网络协议 Cloud Native
为什么服务端会有那么多的 TimeWait ?
为什么服务端会有那么多的 TimeWait ?
|
数据可视化 Java 物联网
java使用RestTemplate发送请求,调用EMQ X的api
java使用RestTemplate发送请求,调用EMQ X的api
176 0