服务端接口中的那些坑

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

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

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

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

 

TOP2:用户权限验证。

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

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

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

 

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

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

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

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS逆向学习笔记

JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话)作用: 可以去Hook一些内置的函数, 例如Debugger, setInterval,JSON.stringify等等2.JS…

bfs+优先队列(hdu1242)

题目:http://acm.hdu.edu.cn/showproblem.php?pid1242这题目就是个大坑,先说下思路就是在遇到‘x’时要多停留1步,另外就是要用到优先队列,要从小到大排列,另外就是普通的bfs了 但是要注意题里的each of Angels frien…

vscode使用汇总——常用插件、常用配置、常用快捷键

一、代码提示快捷键设置:(keybindings.json) [{"key": "ctrlj","command": "-workbench.action.togglePanel"},{"key": "ctrlj","command": "editor.action.tri…

HDFS使用JavaAPI操作上传特定副本到datanode

一、首先自然是导包 $HADOOP_HOME/share/hadoop/common/*.jar $HADOOP_HOME/share/hadoop/common/lib/*.jar $HADOOP_HOME/share/hadoop/hdfs/*.jar $HADOOP_HOME/share/hadoop/hdfs/lib/*.jar 二、代码如下 package com.stu.hdfs; /*** * author ysw28* HDFS的API操…

centos php 版本升级 至5.3 wordpress3.7

今天换了主机,wordpress居然出现下面的错误: 您的服务器现在运行的PHP版本为5.1.6,但WordPress 3.7要求的最低版本为5.2.4。 http://www.webtatic.com/packages/php53/ 这里已经准备了 5.3的安装包, 包括相关的扩展 升级命令: rpm…

vuejs深入浅出—基础篇

一、从HelloWorld说起 任何语言的都是从Hello World开始的&#xff0c;VueJs也不例外&#xff0c;直接上代码&#xff1a; <script src"https://unpkg.com/vue/dist/vue.js"></script><div id"demo">{{hello}}</div><script&g…

近百家公司高级运维的面试题汇总

10月1日日考题 画出系统应用架构图写出LVS与nginx的区别当前数据库服务处理速度慢&#xff0c;你认为可能是什么原因导致的&#xff0c;并阐述一下对应的解决办法说一下你知道的存储引擎&#xff0c;建表时如何决定表使用存储引擎单张表过大有什么缺点&#xff0c;如何解决给你…

Linux idle基础

2019独角兽企业重金招聘Python工程师标准>>> Linux系统越来越受到电脑用户的欢迎&#xff0c;于是很多人开始学习Linux时&#xff0c;学习linux&#xff0c;你可能会遇到linux内核问题&#xff0c;这里将介绍linux内核中idle知识。 1. idle是什么 简单的说idle是一…

PowerDesigner版本控制器设置权限

PowerDesigner版本控制权限之前一直在Groups里面设置&#xff0c;一直没有效果&#xff0c;原因终于找出来了&#xff0c;PowerDesigner是要对每个库单独赋权限的&#xff0c;步骤如下&#xff1a; 连接上版本控制&#xff0c;在左侧菜单 Object Browser里面&#xff0c;找到你…

IT运维面试问题总结-运维工具、开源应用(Ansible、Ceph、Docker、Apache、Nginx等)

1、简述Ansible及其优势&#xff1f; Ansible是一款极其简单的开源的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点。实现了批量系统配置&#xff0c;批量程序部署&#xff0c;批量运行命令等功能。同…

程序员进阶之路—如何独当一面

今天和大家分享一下&#xff0c;程序员如何独当一面这个话题&#xff0c;这是一个很大的话题&#xff0c;我把他分成三部分来谈&#xff1a;  一、需求转换的能力或者叫理解需求的能力&#xff1b;  二、分配时间的能力&#xff1b;  三、开发质量的问题&#xff1b; 我…

html跨浏览器兼容性问题

之前写代码没注意到&#xff0c;这次学习了。 首先 img的width和height属性在IE浏览器中不起作用&#xff0c;可以设置一个div&#xff0c;让img标签在div块中&#xff0c;div中设置style:overflow:hidden,然后用div的宽和高来定义图片的宽和高。 第二个就是&#xff0c;clear:…

Spring经典面试题

文章目录 Spring概述&#xff08;10&#xff09; 什么是spring?Spring框架的设计目标&#xff0c;设计理念&#xff0c;和核心是什么Spring的优缺点是什么&#xff1f;Spring有哪些应用场景Spring由哪些模块组成&#xff1f;Spring 框架中都用到了哪些设计模式&#xff1f;详细…

JDBC 获取被插入数据的主键ID值

除了用存储过程还有以下方法可以获取&#xff1a; static int create() throws SQLException { Connection conn null; PreparedStatement ps null; ResultSet rs null; try { // 2.建立连接 conn JdbcUtils.getConnection(); // …

MySQL 5.6的新特性

MySQL 5.6是一个主要的版本发布&#xff0c;它在性能、可伸缩性、可靠性和可用性方面引入了多项重要改进和新特性。它在2013年发布&#xff0c;相比于它的前身MySQL 5.5&#xff0c;MySQL 5.6带来了以下关键升级&#xff1a; 优化的InnoDB存储引擎&#xff1a;MySQL 5.6中的Inn…

简易数字时钟软件详细制作过程

这是我自己用VS2010制作的简易数字时钟小软件&#xff0c;在制作过程中收获知识不少&#xff0c;希望和初学MFC编程的朋友分享一下。 一、其功能有一下三点&#xff1a; 1.打开软件后&#xff0c;其程序自动获取当前电脑系统的日期、时间和周次&#xff0c;并同步显示在主对 …

关于后台系统自动生成的一点思考

大量实践发现后台管理程序&#xff0c;其实90%的代码都是相同的&#xff0c;当然是在抛弃复杂逻辑业务的情况下&#xff0c;那么如何能高效的节约这些时间呢&#xff0c;那就是接下来我要说的&#xff0c;对于后台系统自动生成的一些思考。 适用情景&#xff1a; 1、表编号id为…

MFC定时器SetTimer函数用法总结

CWnd类的SetTimer成员函数只能在CWnd类或其派生类中调用&#xff0c;而API函数SetTimer则没有这个限制&#xff0c;这是一个很重要的区别。 1、启动定时器。 启动定时器就需要使用CWnd类的成员函数SetTimer。CWnd::SetTimer的原型如下&#xff1a; 参数nIDEvent指定一个非零的…

全网最全的Numpy开发入门教程(详细案例版)

概述 NumPy是一个Python库&#xff0c;每个数据科学专业人员都应该熟悉它这个全面的NumPy教程从头开始介绍NumPy&#xff0c;从基本的数学运算到NumPy如何处理图像数据本文中有大量的Numpy概念和Python代码 介绍 我非常喜欢Python中的NumPy库。在我的数据科学之旅中&#xff…

android开源库收集

1. google valley Android网络通信库 git clone https://android.googlesource.com/platform/frameworks/volley 介绍 http://www.cnblogs.com/bvin/p/3291611.html#2806770 http://liubin.org/2013/05/27/android-volley-at-a-glance/ 2.Afinal是一个android的ioc&#xff…