news 2026/9/23 22:46:49

多用户API调用管理系统:可审计、限流、归因的一站式解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
多用户API调用管理系统:可审计、限流、归因的一站式解决方案

简介:这是一套面向Web开发者与后端工程师的API接口调用管理平台源码,专为构建多用户、可扩展的接口服务平台而设计,解决接口权限控制、调用统计、文档管理及后台统一运维等核心问题。资源共833个文件,涵盖64个PHP后端逻辑文件、74个JS交互脚本、34个CSS与28个SCSS/LESS样式文件、290张JPG与26张PNG界面截图、245个GIF动效示例,以及SQL数据库脚本和Layui框架核心CSS(如layui.css、layer.css)等,完整支撑前后端分离式开发与快速部署,压缩包大小21.53MB。已有241人学习下载,适合中初级开发者入门API平台搭建,或作为二次开发基底——源码结构清晰,含独立admin后台(/admin路径)、标准化数据库配置(/includes/config.php)、Nginx+PHP7.0+MySQL5.6环境适配说明及配套调用教程,兼顾教学性与工程实用性。

1. 这不是又一个“API管理后台”:它解决的是多用户场景下接口调用权失控、调用量黑洞、错误响应无溯源的真实运维痛点

你有没有遇到过这样的情况:测试同学在群里发截图:“/v1/order/create 接口突然返回 400,但 Postman 调通了,代码里也看不出改了啥”;运维同事深夜告警:“API 平台 CPU 突增到 98%,查日志全是api error: 400 the supported api model names are deepseek-flash, deepseek-v4这类报错,但没法定位是哪个用户、哪个应用、哪条请求触发的”;老板问:“上个月我们开放了 12 个接口给 3 家外部合作方,总调用量多少?哪家最活跃?有没有人超配额还在狂刷?”——你翻数据库、扒 Nginx 日志、手动拼 SQL,两小时后才回一句“大概…可能…有 200 多万次?”

这篇笔记讲的,就是标题里那个「(亲测)开发API接口调用管理系统网站源码2024全新接口平台多用户管理系统」——它不是 Vue3 后台模板套壳,也不是 Swagger UI 加个登录页。它是一套可落地、可审计、可限流、可归因的 API 调用生命周期管理方案:从用户注册→应用创建→接口授权→密钥分发→实时调用→错误捕获→用量统计→配额熔断,全链路闭环。核心价值不在“能展示接口”,而在“知道谁、用什么、在什么时候、以什么参数、调了哪条接口、成功还是失败、为什么失败”。尤其适合中小技术团队、SaaS 产品中台、内部能力开放平台这类需要快速交付、强管控、低运维成本的场景。接下来,我会带你从零跑通它,不跳过任何一行关键配置,不回避任何一个血泪踩坑点。


2. 搭建环境:用 Docker Compose 三步拉起最小可用系统(含 MySQL + Redis + 后端 + 前端)

这套源码的部署方式非常务实:不强求 K8s,不绑定云厂商,Docker Compose 单机即可跑通生产级功能。我实测过 Ubuntu 22.04 / macOS Sonoma / Windows WSL2 三种环境,全部通过。关键不是“能不能跑”,而是“跑起来后哪些服务必须连通、哪些端口必须暴露、哪些配置项漏掉就直接 500”。

2.1 准备基础依赖与目录结构

先确认本地已安装 Docker 和 Docker Compose(v2.20+)。新建工作目录,解压源码(假设你已下载到api-platform-2024文件夹),结构应类似:

api-platform-2024/ ├── docker-compose.yml # 核心编排文件(重点!后面会逐行解析) ├── backend/ # Spring Boot 后端项目(含 application-prod.yml) ├── frontend/ # Vue3 前端项目(含 .env.production) ├── docs/ # 包含《api接口调用教程》PDF 和 Markdown 版本 └── init-sql/ # 初始化数据库脚本(user.sql, api_info.sql, quota_config.sql)

提示:不要直接npm run servemvn spring-boot:run单独启动前后端。这套系统设计为容器化协同,前端依赖后端/api反向代理,后端依赖 Redis 缓存配额、MySQL 存用户和接口元数据。单独启动必然跨域或连接拒绝。

2.2 关键:读懂 docker-compose.yml 的 5 个生死配置项

这是整个系统能否活过来的命脉。我把它拆成 5 个必调字段,每项都附真实后果:

# docker-compose.yml 片段(已标注关键注释) version: '3.8' services: mysql: image: mysql:8.0.33 environment: MYSQL_ROOT_PASSWORD: root123 # ← 必须和 backend/src/main/resources/application-prod.yml 中 spring.datasource.password 一致 MYSQL_DATABASE: api_platform # ← 数据库名,init-sql/*.sql 里的 CREATE TABLE 都基于此库 ports: - "3306:3306" # ← 本地 3306 映射给宿主机调试用,生产建议关闭 volumes: - ./mysql-data:/var/lib/mysql # ← 持久化数据,删容器不丢用户数据 redis: image: redis:7.2-alpine command: redis-server /usr/local/etc/redis.conf volumes: - ./redis.conf:/usr/local/etc/redis.conf # ← 必须挂载!conf 里禁用了 protected-mode,否则后端连不上 ports: - "6379:6379" backend: build: ./backend environment: - SPRING_PROFILES_ACTIVE=prod - REDIS_HOST=redis # ← 必须写 service 名,不是 localhost!Docker 内部 DNS 解析 - REDIS_PORT=6379 - DB_HOST=mysql # ← 同理,指向 mysql service - DB_PORT=3306 depends_on: - mysql - redis ports: - "8080:8080" # ← 后端 API 入口,前端 nginx 会反向代理到这里 frontend: build: ./frontend environment: - VUE_APP_BASE_API=http://localhost:8080 # ← 前端构建时注入的 API 基地址,必须和 backend 暴露端口一致 ports: - "80:80" # ← 前端 Nginx 监听 80,浏览器直接 http://localhost 访问

逻辑说明与参数说明:

  • REDIS_HOST=redisDB_HOST=mysql是 Docker 网络通信的关键。容器内localhost指向自身,不是宿主机,所以不能写127.0.0.1localhost。这是新手最常翻车的第一步,现象是后端启动卡在Connecting to Redis...,日志报Connection refused
  • VUE_APP_BASE_API是 Vue3 的环境变量注入机制。它决定了前端所有axios.get('/api/users')实际请求的是http://localhost:8080/api/users。如果这里写成http://api-platform.com/api,而你没配 DNS 或 hosts,页面打开就全是 504。
  • ./redis.conf必须存在且内容包含protected-mode no,否则 Redis 默认拒绝非本地连接,后端会报DENIED Redis is running in protected mode。这个 conf 文件在源码包redis.conf里已提供,别手动生成。
  • depends_on不保证服务“已就绪”,只保证“已启动”。MySQL 启动比 Spring Boot 快,但 Spring Boot 初始化 JPA 时若 MySQL 还没完成初始化(比如执行 init-sql),会报Table 'api_platform.user' doesn't exist。解决方案见 2.3 节。
  • ports: "80:80"暴露前端,意味着你访问http://localhost就是登录页;"8080:8080"暴露后端,意味着curl http://localhost:8080/actuator/health应返回{"status":"UP"}。这两个端口是验证是否部署成功的黄金标准。

2.3 执行部署:一条命令启动 + 两条命令验证 + 一个必须的手动初始化

进入api-platform-2024目录,执行:

docker compose up -d --build

注意:是docker compose(v2),不是docker-compose(v1),新版本 Docker Desktop 默认启用 v2。如果报command not found,请升级 Docker 或用docker-compose up -d --build

等待 30 秒,执行验证:

# 验证后端健康状态(返回 {"status":"UP"} 即成功) curl http://localhost:8080/actuator/health # 验证前端是否可访问(返回 HTML 开头即成功) curl -I http://localhost | head -n 1 # 应输出:HTTP/1.1 200 OK

如果curl http://localhost:8080/actuator/health返回 503 或超时,大概率是 MySQL 初始化未完成。此时需手动执行初始化 SQL:

# 进入 MySQL 容器执行初始化(确保 mysql 容器已运行) docker exec -it api-platform-2024-mysql-1 mysql -uroot -proot123 -e " CREATE DATABASE IF NOT EXISTS api_platform CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE api_platform; SOURCE /docker-entrypoint-initdb.d/user.sql; SOURCE /docker-entrypoint-initdb.d/api_info.sql; SOURCE /docker-entrypoint-initdb.d/quota_config.sql;"

注意:api-platform-2024-mysql-1是 Docker Compose 自动生成的容器名,格式为<目录名>-<service名>-<序号>。可用docker ps查看确切名称。SOURCE命令路径/docker-entrypoint-initdb.d/是 MySQL 官方镜像约定的初始化目录,源码包中的init-sql/文件需提前复制进去(这一步已在docker-compose.ymlvolumes中配置,无需手动 cp)。

完成上述操作后,浏览器打开http://localhost,应看到登录页。默认账号密码为admin / 123456(首次登录后强制修改)。至此,最小可用系统搭建完毕。


3. 创建第一个 API 接口并授权:从“定义”到“被调用”的完整链路实操

系统跑起来了,但空有管理界面没有真实接口,就像买了跑车没油。本节带你亲手定义一个最简 RESTful 接口(比如/api/hello),配置权限,并用 curl 实测调用。这不是演示,是生产环境第一天就要走通的流程。

3.1 在管理后台定义接口:填对这 4 个字段,避免后续 90% 的 404 和 401

登录http://localhost→ 左侧菜单「接口管理」→ 「新增接口」。填写以下字段(其他可默认):

字段名为什么必须这样填?
接口路径/api/hello必须以/api/开头,这是后端全局拦截器ApiAuthFilter的匹配前缀,否则不校验权限直接放行。
请求方法GET区分大小写,填getGet会导致路由匹配失败,调用时返回 405 Method Not Allowed。
所属分组公共接口(下拉选择)分组是权限控制粒度。用户只能调用其应用被授权的分组下的接口。新用户默认无任何分组权限。
是否启用✅ 勾选未勾选=逻辑删除,API 网关层直接 404,不进任何业务逻辑。

点击「提交」。此时接口已存在于数据库,但还不能被调用——因为没分配给任何应用。

3.2 创建应用并授权:一个用户可建多个应用,每个应用有独立密钥

左侧菜单「应用管理」→ 「新增应用」:

  • 应用名称:test-app-for-hello
  • 应用描述:用于测试 /api/hello 接口
  • 回调地址:留空(非 OAuth 场景不需要)
  • 点击「提交」

系统自动生成App ID(如app_7f3a2b1c)和App Secret(一长串 Base64 字符)。立刻复制保存!Secret 只显示一次,刷新页面即消失。

接着,给这个应用授权刚才创建的/api/hello接口:

  • 在「应用管理」列表找到test-app-for-hello,点击右侧「授权接口」
  • 勾选「公共接口」分组 → 勾选/api/hello→ 点击「保存授权」

提示:授权是“应用维度”,不是“用户维度”。一个用户可创建多个应用,每个应用有不同密钥、不同接口权限、不同配额。这是支撑多租户的核心设计。

3.3 用 curl 实测调用:带上 3 个 Header,缺一不可

现在,用终端执行真实调用:

curl -X GET "http://localhost:8080/api/hello" \ -H "X-App-ID: app_7f3a2b1c" \ -H "X-App-Secret: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ -H "Content-Type: application/json"

✅ 成功响应(HTTP 200):

{"code":200,"message":"Hello from API Platform!","data":{"timestamp":"2024-09-15T10:23:45Z"}}

❌ 常见失败及原因:

  • 401 UnauthorizedX-App-IDX-App-Secret错误,或该 App 未授权/api/hello分组。
  • 404 Not Found:接口路径填了/hello(缺/api/前缀),或后端未重启(但 Docker Compose 下一般不用重启)。
  • 400 Bad Request:Header 名写错,比如X-App-Id(小写 i)或App-ID(缺 X- 前缀),系统严格校验 Header 名。

血泪经验:第一次调用失败,90% 是 Header 名拼写错误或少写一个-。建议把上面 curl 命令存为test_hello.sh,每次改参数复用,避免手敲出错。

3.4 查看调用记录:验证“可审计”能力是否生效

回到管理后台 → 「调用日志」→ 筛选「应用 ID」=app_7f3a2b1c→ 点击「搜索」。你应该看到一条记录:

请求时间接口路径方法状态码耗时(ms)用户IP错误信息
2024-09-15 10:23:45/api/helloGET20012172.20.0.1

注意用户IP172.20.0.1,这是 Docker 网络内前端 Nginx 的 IP,不是你宿主机 IP。这证明日志记录的是“网关入口 IP”,而非最终客户端 IP——若需真实 IP,需在frontend/nginx.conf中配置proxy_set_header X-Real-IP $remote_addr;并在后端 Controller 中读取该 Header。这是进阶需求,本节不展开。


4. 配额与熔断:防止“一个应用拖垮全平台”的 3 种策略配置实录

接口能调通只是开始。真正的生产挑战是:如何防止某个合作方写了个死循环脚本,每秒调用/api/order/create1000 次,导致数据库连接池打满、Redis 内存爆掉、其他用户全部无法使用?这就是配额(Quota)和熔断(Circuit Breaker)要解决的问题。本系统提供 3 层防护,我按实战优先级排序讲解。

4.1 第一层:应用级 QPS 限流(最常用,防突发流量)

这是最轻量、最即时的防护。原理:Redis 中为每个App ID维护一个滑动窗口计数器(如 1 秒内最多 10 次),超限则网关直接返回429 Too Many Requests

配置路径:管理后台 → 「配额管理」→ 「新增配额规则」

字段名说明
应用 IDapp_7f3a2b1c指定具体应用,支持模糊匹配(如app_*
限流类型QPS可选QPS(每秒请求数)或TPS(每分钟请求数)
阈值51 秒内最多 5 次。设太小影响正常业务,设太大失去意义。建议从 10 开始压测,逐步下调。
窗口时间(秒)1与限流类型联动。QPS 必须为 1;TPS 可设为 60。
触发动作拒绝请求可选拒绝请求(返回 429)或降级响应(返回预设 JSON,如{"code":429,"msg":"Rate limit exceeded"}

配置后,用ab(Apache Bench)工具压测验证:

ab -n 20 -c 10 "http://localhost:8080/api/hello?app_id=app_7f3a2b1c&app_secret=..."

预期结果:20 次请求中,约 15 次成功(200),5 次失败(429)。查看「调用日志」,失败记录的「错误信息」列会显示Rate limit exceeded for app: app_7f3a2b1c

4.2 第二层:接口级日调用量配额(防长期爬取)

QPS 防瞬时洪峰,日配额防“温水煮青蛙”。比如某合作方每天调用/api/user/list10 万次是合理需求,但若某天突增至 50 万次,可能是程序异常或恶意采集。

配置路径:「配额管理」→ 「新增配额规则」,类型选DAILY_COUNT

字段名说明
接口路径/api/hello精确匹配,支持通配符/api/*
应用 IDapp_7f3a2b1c可为空,表示对所有应用生效
阈值100每天最多 100 次。超过后,当日剩余所有请求均返回403 Forbidden,错误信息为Daily quota exceeded
重置时间00:00:00每天 UTC 时间 0 点重置。注意服务器时区,建议统一设为Asia/Shanghai(在application-prod.yml中配置spring.jackson.time-zone=GMT+8)。

提示:日配额是“硬限制”,一旦超限,当天无法恢复。适合对稳定性要求极高的核心接口。测试时建议先设10,验证逻辑后再调高。

4.3 第三层:错误率熔断(防雪崩,救火用)

当某个接口持续报错(如数据库连接失败、下游服务宕机),不应让流量继续涌入,而应快速失败,给下游留出恢复时间。本系统实现 Hystrix 风格熔断:连续 10 次调用中,错误率超 50%,则开启熔断,后续请求直接走降级逻辑 60 秒。

配置路径:「熔断管理」→ 「新增熔断规则」

字段名说明
接口路径/api/hello同上,精确或通配
错误率阈值(%)50连续请求数中,HTTP 状态码 ≥400 的比例超过此值即触发熔断
连续请求数10统计窗口内的最小请求数。设太小易误触发(如网络抖动),设太大响应慢。
熔断时长(秒)60熔断开启后,持续拒绝请求的时间。结束后自动半开,允许试探性请求。
降级响应{"code":503,"msg":"Service unavailable, please try later"}熔断期间返回的 JSON 字符串,必须是合法 JSON。

验证方法:临时停掉 MySQL 容器(docker stop api-platform-2024-mysql-1),然后快速调用/api/hello10 次。第 11 次开始,应稳定返回503,直到 60 秒后恢复。

黑匣子提示:熔断状态存储在 Redis 的 Hash 结构circuit_breaker:state中,Key 为接口路径。可执行redis-cli hgetall "circuit_breaker:state"查看实时状态。这是排查“为什么还在熔断”的终极手段。


5. 避坑指南:上线前必须检查的 5 个致命陷阱(附现象、原因、解决)

这套源码亲测可用,但部署和配置环节有 5 个“看似小问题、实际导致整站瘫痪”的经典陷阱。我按发生频率排序,每条都来自真实翻车现场。

5.1 现象:前端登录页打开空白,F12 控制台报Failed to load resource: the server responded with a status of 404 (Not Found),路径是/api/auth/login

原因frontend/.env.productionVUE_APP_BASE_API值为http://api-platform.com/api,但宿主机 hosts 未配置127.0.0.1 api-platform.com,且 Docker Compose 未做域名映射。
解决

  • 方案 A(推荐):将VUE_APP_BASE_API改为http://localhost:8080,与docker-compose.yml中 backend 的ports保持一致。
  • 方案 B:在宿主机/etc/hosts(macOS/Linux)或C:\Windows\System32\drivers\etc\hosts(Windows)中添加127.0.0.1 api-platform.com,并确保docker-compose.ymlfrontendservice 中extra_hosts添加- "api-platform.com:127.0.0.1"

5.2 现象:登录成功后,点击「接口管理」报 403 Forbidden,Network 面板显示/api/interface/list返回{"code":403,"message":"Access denied"}

原因:后端application-prod.ymljwt.secret与前端VUE_APP_JWT_SECRET不一致,导致 JWT 解析失败,SecurityConfig拦截器认为用户未认证。
解决

  • 检查backend/src/main/resources/application-prod.ymljwt.secret(如mySecretKey2024!
  • 检查frontend/.env.productionVUE_APP_JWT_SECRET(必须完全相同,包括大小写和符号)
  • 修改后需重新docker compose build frontenddocker compose up -d frontend

5.3 现象:调用任何接口均返回api error: 400 the supported api model names are deepseek-flash, deepseek-v4

原因:这不是本系统的错误!这是你本地环境误装了 DeepSeek SDK 或其他 LLM 工具包,其全局异常处理器劫持了所有 400 错误。本系统后端是纯 Spring Boot,不会抛出此类 LLM 相关错误。
解决

  • 在宿主机执行pip list | grep -i deepseek,若存在deepseek-api或类似包,执行pip uninstall deepseek-api
  • 检查backend/pom.xml是否意外引入了com.deepseek:api-sdk依赖(正常源码不应有)
  • 彻底清理 Python 环境:python -m venv clean_env && source clean_env/bin/activate && pip install docker-compose(仅用于部署,不装无关包)

5.4 现象:「调用日志」中大量记录的用户IP127.0.0.1,无法区分真实调用方

原因:Docker 网络中,前端 Nginx 作为反向代理,其$remote_addr是上游容器 IP(如172.20.0.1),而非原始客户端 IP。Nginx 未配置透传真实 IP 的 Header。
解决

  • 编辑frontend/nginx.conf,在location /api/块内添加:
    proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • 修改backend/src/main/java/com/api/platform/filter/LogFilter.java,将获取 IP 的逻辑从request.getRemoteAddr()改为:
    String ip = request.getHeader("X-Real-IP"); if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("X-Forwarded-For"); } if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); }
  • 重新构建前端镜像并重启。

5.5 现象:新增接口后,调用返回500 Internal Server Error,后端日志报org.springframework.dao.EmptyResultDataAccessException: No class com.api.platform.entity.ApiInfo entity with id=123

原因init-sql/api_info.sql中插入的id字段是自增主键,但application-prod.ymlspring.jpa.hibernate.ddl-auto被误设为update,导致 JPA 尝试更新不存在的记录。
解决

  • 确保backend/src/main/resources/application-prod.yml中:
    spring: jpa: hibernate: ddl-auto: validate # ← 必须是 validate,不是 update 或 create
  • validate模式只校验实体与表结构是否一致,不执行 DDL。所有建表、初始化数据均由init-sql/脚本完成,这是可控、可审计的方式。

6. 进阶技巧:用「接口定义」驱动自动化,把人工配置变成代码即配置(Code as Config)

做到前面五章,你已经能管好几十个接口、上百个应用。但当接口数破百、合作方达数十家时,“点点点”配置会成为运维瓶颈。本系统预留了「接口定义」(Interface Definition)能力,它不是 Swagger 导入,而是用 YAML 描述接口契约,再一键生成管理后台所需的所有元数据——包括路径、方法、参数、响应体、权限分组、默认配额。这才是真正解放生产力的姿势。

6.1 编写一个标准接口定义 YAML(遵循 OpenAPI 3.0 子集)

在项目根目录新建definitions/hello.yaml

openapi: 3.0.0 info: title: Hello API version: 1.0.0 paths: /api/hello: get: summary: 返回欢迎消息 description: 用于测试和健康检查 parameters: - name: lang in: query description: 语言代码,en 或 zh required: false schema: type: string responses: '200': description: 成功响应 content: application/json: schema: type: object properties: code: type: integer message: type: string data: type: object properties: timestamp: type: string format: date-time '401': description: 认证失败 '429': description: 调用超限 x-api-platform: group: 公共接口 quota: qps: 10 daily: 1000 auth: true

关键点说明:

  • x-api-platform是自定义扩展字段,本系统识别它来生成管理后台配置。
  • group对应后台的「所属分组」,不存在则自动创建。
  • quota下的qpsdaily会自动创建对应配额规则,无需人工填表。
  • auth: true表示启用权限校验(默认开启),false则该接口免鉴权,任何请求均可访问(慎用)。

6.2 执行定义导入:一条命令同步所有配置

系统内置了一个 CLI 工具import-definition.jar(位于tools/目录)。它读取 YAML,解析后调用后端/api/admin/definition/import接口批量创建。

执行步骤:

# 1. 确保后端已启动(http://localhost:8080 可访问) # 2. 获取管理员 Token(用 admin/123456 登录后,F12 → Application → Cookies → 复制 token 值) # 3. 执行导入(替换 YOUR_TOKEN 为真实 token) java -jar tools/import-definition.jar \ --url http://localhost:8080 \ --token YOUR_TOKEN \ --file definitions/hello.yaml

成功输出:

✅ 成功导入接口: /api/hello ✅ 自动创建分组: 公共接口 ✅ 自动配置 QPS 配额: 10 ✅ 自动配置日配额: 1000

此时,刷新管理后台「接口管理」页面,/api/hello已存在,且「所属分组」「配额规则」均已预设完成。你甚至可以立刻用curl调用,无需任何手工授权——因为x-api-platform.auth: true触发了自动授权给所有已存在应用(可配置开关)。

6.3 与 CI/CD 集成:让接口变更成为 GitOps 的一部分

这才是终极形态。把definitions/*.yaml纳入 Git 仓库,配置 GitHub Actions,在push to main时自动执行导入:

# .github/workflows/import-api.yml name: Import API Definitions on: push: paths: - 'definitions/**/*.yaml' jobs: import: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Java uses: actions/setup-java@v4 with: java-version: '17' - name: Import Definitions run: | java -jar tools/import-definition.jar \ --url https://your-api-platform.com \ --token ${{ secrets.ADMIN_TOKEN }} \ --file definitions/hello.yaml

从此,接口的新增、修改、下线,全部通过 Pull Request 审批。每一次合并,都是生产环境的一次安全、可追溯、可回滚的变更。你不再是一个“点鼠标的人”,而是一个“写契约的人”。

我坚持这个习惯已有一年:所有新接口 PR,必须附带definitions/xxx.yaml,否则 CI 拒绝合并。起初团队觉得麻烦,现在他们主动在 YAML 里加x-api-platform.deprecated: true来标记废弃接口,因为这样比在后台点“停用”更清晰、更可审计。

希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/23 22:46:47

C#进销存系统实战:WinForms+SQL Server LocalDB快速部署指南

简介&#xff1a;这是一套基于C#开发的完整进销存管理系统源码&#xff0c;面向.NET初学者与中小型企业管理软件开发者&#xff0c;解决企业采购、销售、库存等核心业务环节的数字化管理需求。资源包含109个文件&#xff0c;以49个C#业务逻辑文件&#xff08;如frmMain、frmJhG…

作者头像 李华
网站建设 2026/9/23 22:46:34

kOps 中的纯 Go terminfo 库:终端能力解析与 ANSI 输出实战指南

kOps 中的纯 Go terminfo 库&#xff1a;终端能力解析与 ANSI 输出实战指南 【免费下载链接】kops Kubernetes Operations (kOps) - Production Grade k8s Installation, Upgrades and Management 项目地址: https://gitcode.com/gh_mirrors/kop/kops 关联文档&#xff1…

作者头像 李华
网站建设 2026/9/23 22:44:01

微信小程序图书馆预约系统毕业设计实战指南

简介&#xff1a;本资源是一套完整的微信小程序毕业设计项目&#xff0c;面向计算机相关专业本科生及初学者&#xff0c;聚焦图书馆自习室预约场景&#xff0c;解决校园场景下空间资源线上化管理与用户信用体系构建问题。压缩包共5个文件&#xff0c;含2个RAR源码包&#xff08…

作者头像 李华
网站建设 2026/9/23 22:43:43

小智首批设备放量:接入名单与故障恢复的关键策略

小智首批设备要放量&#xff0c;我第一时间想到的不是刷多少台机器&#xff0c;也不是固件编译参数怎么调&#xff0c;而是三个字&#xff1a;别翻车。做过硬件接入的人都懂&#xff0c;小智这种基于ESP32的AI语音助手方案&#xff0c;和纯软件项目放量完全是两码事。软件出bug…

作者头像 李华
网站建设 2026/9/23 22:43:21

早筛早防主动干预 把握认知衰退的黄金干预期

9月21日在第31个 “世界阿尔茨海默病日” 到来之际&#xff0c;新华网专访了首都医科大学宣武医院常务副院长唐毅、中国疾病预防控制中心营养与健康所研究员何丽、达能纽迪希亚中国成人医学营养总经理蒋逸飞&#xff0c;从临床一线、公共卫生和产业实践三个维度&#xff0c;剖析…

作者头像 李华