一、接口开发规范

  1. 签名:对外提供的接口要做签名认证,认证不通过的请求不允许访问接口、提供服务。

  2. 加密:敏感数据在网络传输过程中应该加密。

  3. IP白名单:限制请求的IP,增加IP白名单,一般在网关层处理。

  4. 限流:尤其是对外提供的接口,无法保障调用的频率,应该做限流处理,保障接口服务正常提供服务。

  5. 参数校验:即使前端做了非空,规范性校验,服务端参数校验仍然是非常必要的。

  6. 统一返回值:一个服务一套同意的数据返回结果和传参规范。

  7. 统一异常封装:系统报错友好提示,避免暴露出sql异常的信息给调用方。

  8. 请求日志:记录系统产生的日志,方便快速定位分析问题。

  9. 幂等设计:对于一些涉及到数据一致性的接口一定要做好幂等设计,防止数据出现重复问题。

  10. 限制记录条数:对于提供的大批量数据查询接口,一定要限制请求的记录条数。

  11. 压测:上线前我们务必要对 API接口做一下压力测试,知道各个接口的qps情况。以便于我们能够更好的预估,需要部署多少服务器节点,对于API接口的稳定性至关重要

  12. 异步处理:如果同步处理业务,耗时会非常长。这种情况下,为了提升API接口的性能,我们可以改成异步处理。

  13. 数据脱敏:关系到业务中用户的敏感数据要进行脱敏处理。

  14. 完整的接口文档

二、保证API接口安全的10个小技巧

1、参数校验

必要性:防止无效请求,提高接口安全。

校验内容:

  • 参数是否为空
  • 参数类型是否正确
  • 参数长度是否合理
  • 枚举值是否合法
  • 数据范围是否合适

2、统一封装返回值

目的:防止敏感信息泄露,保持响应结构一致。

返回值格式:

{
"code": 0,
"message": "操作成功",
"data": [{"id": 123, "name": "abc"}]
}

code含义:0-成功,1-参数为空,2-参数错误,3-签名错误,4-请求超时,5-服务器内部错误等。

3、输入转义

  • XSS防御:转义用户输入的特殊字符

  • SQL注入防御:对用户输入进行SQL转义

4、权限控制

  • 登录校验:判断用户是否登录

  • 功能权限:只有特定权限的用户可以访问某些接口

  • 数据权限:根据用户角色控制数据访问范围

5、验证码

  • 用途:防止恶意刷接口,

  • 形式:图形验证码、滑块验证、短信验证码。

  • 注意:复杂验证码会影响用户体验。

6、限流

  • 方法:对请求频率进行限制,防止接口被恶意刷。

  • 实现:使用 Redis记录请求次数,设置每天的请求上限。

7、IP白名单

  • 用途:限制只有特定IP可以访问重要接口。

  • 实现:动态配置IP白名单,或通过数据库管理。

8、敏感词校验

  • 方法:使用敏感词库对用户输入进行校验。

  • 实现:自定义注解和AOP拦截器,敏感词匹配通过第三方接口或本地词库。

9、HTTPS协议

  • 优点:数据加密,防止窃听、伪装和篡改。

  • 注意:需要申请证书,有额外费用。

10、数据加密

  • 用途:保护用户核心信息(如手机号、邮箱等)。

  • 实现:使用 AES对称加密,自定义注解实现字段加解密。

三、API性能优化方法

1、索引优化

可以从以下几个角度入手:没加索引,索引没生效,选错索引

2、SQL优化

如果优化了索引之后效果不明显,接下来可以尝试优化一下SQL语句,因为相对于修改Java代码来说,改造 SQL语句的成本要小得多。

3、远程调用

  • 串行改并行
  • 数据异构:为了提升接口性能,尤其在高并发场景下,可以考虑数据几余,将用户信息、积分和成长值的数据统一存储在一个地方,比如 Redis。

4、重复调用

  • 问题:在我们的日常工作代码中,重复调用非常常见,但如果没有控制好,会严重影响接口的性能。

  • 方案:可以通过批量查询来优化性能,减少数据库的查询次数。

5、异步处理

核心逻辑可以同步执行,同步写库。非核心逻辑,可以异步执行,异步写库。

异步处理通常有两种主要方式:多线程和消息队列(MQ)

6、避免大事务

为了避免大事务引发的问题,可以考虑以下优化建议:

  • 少用 @Transactional 注解
  • 将查询(select)方法放到事务外
  • 事务中避免远程调用
  • 事务中避免一次性处理太多数据
  • 有些功能可以非事务执行
  • 有些功能可以异步处理

7、锁粒度

为了避免多个线程并发修改同一共享数据而引发数据异常,通常我们会使用加锁的方式来解决这个问题。

然而,如果锁的设计不当,导致锁的粒度过粗,也会对接口性能产生显著的负面影响。

8、分页处理

问题:调用接口从数据库获取数据需要经过网络传输。如果数据量过大,无论是数据获取速度还是网络传输速度都会受到带宽限制,从而导致耗时较长。

方案:将一次性获取所有数据的请求,改为分多次获取,每次只获取一部分用户的数据,最后进行合并和汇总,

9、加缓存

我们最常用的缓存是:RedisMemcached

10、分库分表

问题:当系统发展到一定阶段,用户并发量增加,会有大量的数据库请求,这不仅需要占用大量的数据库连接,还会带来磁盘10的性能瓶颈问题。

方案:通过分库分表来解决。

11、监控功能

  • 开启慢查询日志
  • 链路跟踪
  • 开源监控系统 Prometheus。

四、公共数据接口API

https://www.zhihu.com/question/32225726

https://www.cnblogs.com/chen0307/p/9634848.html

https://www.kancloud.cn/lizhixuan/free_api

https://www.seniverse.com/api

https://apis.baidu.com/

如何合理开发Java接口(安全性,可重复调用,稳定性,追溯性)的更多相关文章

  1. OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例

    转自:  http://blog.csdn.net/yanzi1225627/article/details/16917961 开发环境:windows+ADT Bundle+CDT+OpenCV-2 ...

  2. JMeter5.1开发Java协议接口脚本【待完成】

    JMeter5.1开发Java协议接口脚本

  3. Java++:安全|API接口安全性设计

    接口的安全性主要围绕 token.timestamp 和 sign 三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看: Token授权机制: 用户使用用户名密码登录后服务器给客户端返 ...

  4. Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类?

    Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类? 2013-01-05 17:16:09|  分类: JAVA |  标签:java  |举报|字号 订阅     下面比较一下两者的 ...

  5. java 接口的作用和好处

    1.java 接口的作用 http://blog.csdn.net/hack_bug/article/details/7634737 2.一位Java大牛的回答 很多JAVA初级程序员对于接口存在的意 ...

  6. java接口

    一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...

  7. 崔用志-微信开发-java版本

    崔用志-微信开发-java版本 今天看到一些关于微信开发的知识蛮好的博客,分享给大家,希望对大家有帮助. 微信开发准备(一)--Maven仓库管理新建WEB项目 微信开发准备(二)--springmv ...

  8. 初探设计:Java接口和抽象类何时用?怎么用?

    今天犯了个错: “接口变动,伤筋动骨,除非你确定只有你一个人在用”.哪怕只是throw了一个新的Exception.哈哈,这是我犯的错误. 一.接口和抽象类 类,即一个对象. 先抽象类,就是抽象出类的 ...

  9. Java 接口和抽象类差别

    原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想非常大程度上取决于它的总体架构,而这个总体架构事实上 ...

  10. 早期MyBatis开发与接口式Mybatis开发的简介

    早期MyBatis开发与接口式Mybatis开发的简介 一.早期版本的myBatis使用 导jar包            1.配置mybatis.xml的配置文件                1) ...

随机推荐

  1. 物联网平台选型葵花宝典:盘点开源、SaaS及通用型平台的优劣对比

    随着工业物联网领域和智慧物联领域的发展,大大小小的物联项目和物联场景需求层出不穷,物联网平台作为技术底座型软件,是不可或缺的项目地基. 市场需求下,物联网平台提供商越来越多,"打地基&quo ...

  2. Winform程序在VS中打包成安装程序(带卸载)

    场景 在VS中进行Winform开发时,可以直接在项目上右击选择生成 则会在项目的bin目录下直接生成exe等文件,此时将这个文件夹直接整个复制到别的地方就可以运行. 但是如果将其做成安装包安装的形式 ...

  3. windows下IPv6通信(C++、MFC)

    Server #include <stdio.h> #include <Ws2tcpip.h> #include <winsock2.h> #define HELL ...

  4. 一个前后端都有的后台管理系统,使用nest.js和vue3

    今天介绍一个新的Vue后台管理框架,相比其他后台功能丰富管理系统,这个后台管理系统可以用干净简洁来形容--Nova-admin Nova-admin Nova-admin 是一个基于Vue3.Vite ...

  5. c# 语音识别 | 智能对话

    在.NET4.0中,我可以借助System.Speech组件让电脑来识别我们的声音. 以上,当我说"name",显示"Darren",我说"age&q ...

  6. 算法金 | 读者问了个关于深度学习卷积神经网络(CNN)核心概念的问题

    ​大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣] 读者问了个关于卷积神经网络核心概念的问题,如下, [问]神经元.权重.激活函数.参数 ...

  7. 利用nodejs的require.context来实现不用写impor导入组件

    先给你们看下目录结构 stuendt和teacharts还有util是同级 主要是componentRegister.js文件 function changStr(str) { return str. ...

  8. 箭头函数 函数中的this指向

      // 箭头函数         // 在匿名函数中,使用 => 箭头来替换 关键词 function          // 箭头定义下 () 和 {} 之间         // 等于在使 ...

  9. Vue第三方库与插件实战手册

    title: Vue第三方库与插件实战手册 date: 2024/6/8 updated: 2024/6/8 excerpt: 这篇文章介绍了如何在Vue框架中实现数据的高效验证与处理,以及如何集成E ...

  10. 喜讯!INFINI Easysearch 在墨天轮搜索型数据库排名中荣登榜首

    近日,2023 年 9 月的 墨天轮中国数据库流行度排行 火热出炉,本月共有 287 个数据库参与排名,中国数据库行业竞争日益激烈.其中,极限科技旗下软件产品 INFINI Easysearch 在 ...