<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>json-schema on </title>
    <link>/tags/json-schema/</link>
    <description>Recent content in json-schema on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Sat, 25 Apr 2026 10:00:00 +0800</lastBuildDate><atom:link href="/tags/json-schema/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>API 与 event contract 兼容性保障：工具机制与正确用法</title>
      <link>/posts/api-event-contract-compatibility-qa-2026/</link>
      <pubDate>Sat, 25 Apr 2026 10:00:00 +0800</pubDate>
      
      <guid>/posts/api-event-contract-compatibility-qa-2026/</guid>
      <description>📦 本文基于的完整项目源码：meirongdev/shop
上一篇 微服务 contract 兼容性的五层防线：从 ArchUnit 到 japicmp 讨论了如何用 ArchUnit、japicmp、WireMock 和运行时 Deprecation 头构建基础安全带。本文聚焦更具体的问题：BFF 对外的 API、BFF→MS 和 MS→MS 的内部 API、以及 Kafka 事件，各自应该用什么工具保障 contract 兼容性，这些工具的工作机制是什么。
一、两类 contract，两种保障方式 Q：BFF 对外暴露的 API 和 BFF→MS、MS→MS 之间的内部 API，兼容性的保障方式应该一样吗？
在我的实践中不太一样。主要原因在于 source of truth 不同。
BFF 对外的 API（前端、移动端、三方调用方）采用的是 API-first 方式：先有 OpenAPI YAML，生产者的 controller 实现这份 YAML，消费者根据这份 YAML 生成客户端代码或手写调用。在这条链路里，YAML 就是权威来源。保障兼容性就是保障 YAML 文件本身不引入 breaking change。
BFF→MS 和 MS→MS 之间采用的是 code-first 方式：Java record 是 source of truth，没有提前写 spec，序列化层（Jackson）从 record 推导出 JSON 结构。保障兼容性就是保障 Java record 的 JSON 表现形式不引入 breaking change。</description>
    </item>
    
    <item>
      <title>从 OpenAPI 3.0 到 3.1：一次升级验证记录</title>
      <link>/posts/openapi-31-upgrade/</link>
      <pubDate>Fri, 10 Apr 2026 14:00:00 +0800</pubDate>
      
      <guid>/posts/openapi-31-upgrade/</guid>
      <description>📦 本文基于的完整项目源码：https://github.com/meirongdev/shop
🏷️ 当前文章对应的代码版本：openapi_3_1_upgrade
背景 我们的电商平台自启动以来，一直使用 OpenAPI 3.0.x 作为 API 文档规范。近期在整理 SpringDoc 2.8.9 和 JSON Schema 2020-12 工具链时，我顺手验证了一次 OpenAPI 3.1 升级的可行性，最后决定先在项目里试着切过去。
就这次实践看，升级过程主要是一行配置，没有涉及 Java 代码改动。下面更像是一份升级笔记：记录我为什么做这件事、哪些收益比较直接，以及哪些兼容性边界要先确认。
OpenAPI 3.1 的核心变化 OpenAPI 3.1 于 2021 年底发布（官方发布公告），虽然看起来只是小版本号 +1，但它底层做了一个根本性的改变：全面对齐 JSON Schema Draft 2020-12（JSON Schema 2020-12 规范）。
这不只是&amp;quot;换了一个标准&amp;quot;，更像是把 OpenAPI Schema 往 JSON Schema 工具链上靠近了一步。
变化一：nullable 语义重构 OpenAPI 3.0 的写法：
{ &amp;#34;type&amp;#34;: &amp;#34;string&amp;#34;, &amp;#34;nullable&amp;#34;: true } 这是一个 OpenAPI 自定义扩展字段。JSON Schema 标准中不存在 nullable，这意味着：
标准 JSON Schema 校验器不认识它 代码生成器需要专门处理 OpenAPI 特有的逻辑 与 JSON Schema 生态工具链不互通 OpenAPI 3.</description>
    </item>
    
  </channel>
</rss>
