http(s)接口设计注意事项

http(s)在设计时应考虑:

一、签名认证

鉴权,如jwt方式等。

二、重要参数加密

如:用户的登录密码、银行卡号、转账金额、用户身份证等。

三、IP白名单

为了进一步加强API接口的安全性,防止接口的签名或者加密被破解了,攻击者可以在自己的服务器上请求该接口。

四、接口限流

如果API接口被第三方平台调用了,这就意味着着,调用频率是没法控制的。由此,需要对重要API接口做限流

五、参数校验与限制记录条数

如:校验必填字段是否为空,校验字段类型,校验字段长度,校验枚举值等等。这样做可以拦截一些无效的请求。

在Java中校验数据使用最多的是hiberateValidator框架,它里面包含了@Null、@NotEmpty、@Size、@Max、@Min等注解。用它们校验数据非常方便。

另外提供的批量接口,一定要限制请求的记录条数,如果请求的数据太多,很容易造成API接口超时等问题,让API接口变得不稳定。

六、统一返回值与统一封装异常

API网关捕获业务异常,然后转换成统一的异常结构返回,这样能统一返回值结构。

七、请求日志

最好有traceId,可以通过它串联整个请求的日志,过滤多余的日志。

八、幂等设计

支持在极短的时间内,第三方平台用相同的参数请求API接口多次,可能是bug或者接口重试,第一次请求数据库会新增数据,但第二次请求以后就不会新增数据,但也会返回成功。

高并发下可以通过乐观锁、加唯一索引等方法保证接口的幂等性。

高并发下如何保证接口的幂等性?

九、异步处理

一般的API接口的逻辑都是同步处理的,请求完之后立刻返回结果。对于非常复杂耗时的逻辑,则需要异步处理。

在API接口中可以发送一条mq消息,然后直接返回成功。之后,有个专门的mq消费者去异步消费该消息,做业务逻辑处理,如何通知调用方:

方法一:回调第三方平台的接口,告知API接口的处理结果,很多支付接口就是这么玩的。

方法二:第三方平台通过轮询调用我们另外一个查询状态的API接口,每隔一段时间查询一次状态,传入的参数是之前的那个API接口中的id集合。

十、数据脱敏

我们可以在返回的数据中,部分内容用星号代替。如:123****888

十一、压测

上线前我们对API接口做一下压力测试,知道各个接口的qps情况。

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

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

相关文章

HelloMeme 上手即用教程

HelloMeme是一个集成空间编织注意力的扩散模型,用于生成高保真图像和视频。它提供了一个代码库,包含实验代码和预训练模型,支持PyTorch和FFmpeg。用户可以通过简单的命令行操作来生成图像和视频。 本文将详细介绍,如何在GPU算力租…

Vue2+ElementUI:用计算属性实现搜索框功能

前言: 本文代码使用vue2element UI。 输入框搜索的功能,可以在前端通过计算属性过滤实现,也可以调用后端写好的接口。本文介绍的是通过计算属性对表格数据实时过滤,后附完整代码,代码中提供的是死数据,可…

blind-watermark - 水印绑定

文章目录 一、关于 blind-watermark安装 二、bash 中使用三、Python 调用1、基本使用2、attacks on Watermarked Image3、embed images4、embed array of bits 四、并发五、相关 Project 一、关于 blind-watermark Blind watermark 基于 DWT-DCT-SVD. github : https://githu…

【小白可懂】微信小程序---课表渲染

结果展示:(代码在最后) WeChat_20241116174431 项目简介 在数字化校园建设的大背景下,为了更好地服务于在校师生,我们开发了一款基于微信小程序的课表管理系统。该系统采用了现代化的前端技术和优雅的设计风格&#x…

循环神经网络(GRU)全面解析

1. 引言 什么是GRU? GRU(Gated Recurrent Unit,门控循环单元)是一种循环神经网络(Recurrent Neural Network, RNN)变体,旨在处理序列数据。GRU在LSTM(Long Short-Term Memory&…

Kafka一些常用的命令行操作【包含主题命令、生产者和消费者命令】

文章目录 1、主题命令2、生产者命令行操作3、消费者命令行操作 1、主题命令 查看当前服务器中的所有 topic: kafka-topics.sh --bootstrap-server node01:9092 --list 创建topic: kafka-topics.sh --bootstrap-server node01:9092 --create --topic to…

前端开发设计模式——责任链模式

目录 一、定义和特点 1. 定义 2. 特点 二、实现方式 定义抽象处理者(Handler)类 创建具体处理者(ConcreteHandler)类 构建责任链 以下是一个用 JavaScript 实现的示例: 三、应用场景 1. 表单验证 2. 请求处…

P1325 雷达安装

题目&#xff1a;P1325 雷达安装 代码分析&#xff1a; #include<bits/stdc.h> using namespace std; long long n,d,x[10005],y[10005]; struct node{double l,r; }a[1010]; bool cmp(node A,node B){return A.r<B.r;//按右端点从小到大排序 } int main(){cin>…

C# x Unity 从玩家控制类去分析命令模式该如何使用

本文部分内容出自游戏编程模式一书,游戏编程模式,有兴趣的小伙伴可以去看看,虽然不是unity x c#写的 但是思路挺好的 目录 目录 0.先说结论 发现问题 命令模式如何解耦 打个断点更利于分析 怎么实现延迟命令? 如何撤销命令? 脚本整体一览 不足分析(AI) 0.先说结论 …

odoo 17 后端路由接口认证自定义

odoo 17 后端路由接口认证自定义 在接口中, 我们都知道有3中常用的认证方式 user 用户级认证public 访问时赋予公共用户none 不做任何用户级处理 一般不做数据库重要数据校验, 仅做访问处理 以上是源码提供的三种方式 接下来我们自定义一个认证方式 首先找到的这认证是在…

Spark RDD 的 compute 方法

角度一 Spark RDD 的 compute 方法 1. 什么是 compute&#xff1f; compute 是 Spark RDD 中的核心方法之一。 它定义了如何从特定的分区中获取数据&#xff0c;并返回一个 迭代器&#xff0c;供上层操作使用。每个 RDD 的计算逻辑由 compute 方法决定&#xff0c;不同类型的…

Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III

Day44 | 动态规划 &#xff1a;状态机DP 买卖股票的最佳时机IV&&买卖股票的最佳时机III&&309.买卖股票的最佳时机含冷冻期 动态规划应该如何学习&#xff1f;-CSDN博客 本次题解参考自灵神的做法&#xff0c;大家也多多支持灵神的题解 买卖股票的最佳时机【…

IDEA2024:右下角显示内存

使用场景&#xff1a; 实时知晓idea内存使用情况 解决方案: 开启内存显示 View -> Apperance -> Status Bar Widgets -> Memory Indicator 效果如下&#xff1a;

HBase理论_背景特点及数据单元及与Hive对比

本文结合了个人的笔记以及工作中实践经验以及参考HBase官网&#xff0c;我尽可能把自己的知识点呈现出来&#xff0c;如果有误&#xff0c;还请指正。 1. HBase背景 HBase作为面向列的数据库运行在HDFS之上&#xff0c;HDFS缺乏随机读写操作&#xff0c;HBase正是为此而出现。…

git创建远程仓库,以gitee码云为例GitHub同理

git远程Remote服务端仓库构建的视频教程在这 Git建立服务端Remote远程仓库&#xff0c;gitee码云例&#xff0c;Github_哔哩哔哩_bilibili 1、登gitee码云/Github 登录 - Gitee.com https://github.com/ &#xff08;没账号的注册一下就行&#xff09; 点击如下图位置的创…

windows工具 -- 使用rustdesk和云服务器自建远程桌面服务, 手机, PC, Mac, Linux远程桌面 (简洁明了)

目的 向日葵最先放弃了, todesk某些功能需要收费, 不想用了想要 自己搭建远程桌面 自己使用希望可以电脑 控制手机分辨率高一些 原理理解 ubuntu云服务器配置 够买好自己的云服务器, 安装 Ubuntu操作系统 点击下载 hbbr 和 hbbs 两个 deb文件: https://github.com/rustdesk/…

SpringBoot整合Mybatis-Plus实践汇总

相关依赖 MyBatis-Plus涉及的依赖主要是Mybatis-start、和分页插件的依赖&#xff0c;不考虑使用额外分页插件的前提下&#xff0c;只需要mybatis-plus-boot-starter一个依赖即可与SpringBoot集成&#xff1a; <!--Mybatis-plugs--><dependency><groupId>co…

SSE与WebSocket与MQTT

SSE <template><div><h1>实时消息</h1><ul><li v-for"(msg, index) in messages" :key"index">{{ msg }}</li></ul></div> </template><script setup> import { ref, onMounted, onUn…

计算机网络各层设备总结归纳(更新ing)

计算机网络按照OSI&#xff08;开放式系统互联&#xff09;模型分为七层&#xff0c;每一层都有其特定的功能和对应的网络设备。以下是各层对应的设备&#xff1a; 1. 物理层&#xff08;Physical Layer) 设备&#xff1a;中继器&#xff08;Repeater&#xff09;、集线器…

Oracle19C AWR报告分析之Wait Classes by Total Wait Time

Oracle19C AWR报告分析之Wait Classes by Total Wait Time 一、分析数据二、详细分析2.1 指标参数介绍2.2 数据库性能分析2.3 综合性能评估 在 Oracle 数据库的 AWR 报告中&#xff0c;Wait Classes by Total Wait Time 是评估数据库性能的重要部分。本篇文章主要是介绍指标参数…