Spring Boot - Java:通过比较两个 openapi 合约文件来检查两个给定 API 的向后兼容性

问题描述 投票:0回答:1

我有一个 Spring Boot 应用程序,在那里我从客户端接收 openapi 合约文件。 因此,我必须将新收到的合约文件与最新的合约文件(来自数据库)进行比较,并检查它们是否向后兼容。

为此,我首先检查了 pact.io。但正如我发现的,使用 pact.io 我们只能通过测试真实端点来检查向后兼容性。 (通过针对真实端点生成合同文件,并稍后使用消费者驱动的合同测试对其进行测试)。 但是,就我而言,我无法使用真实端点对其进行测试。我只有旧合同文件和新合同文件来检查。 当我搜索这个问题时,我发现了这个链接:https://specmatic.in/comparisons/specmatic-vs-pact-io-and-pactflow-io,它说pact.io不支持合同与合同比较。而且,它还表示对合同与合同比较的空间支持。检查这张图片:pact vs specmatic

然后,我检查了specmatic,发现我们可以使用spacematic比较两个合约文件,并知道它们是否向后兼容。但我们只能在命令行中使用

specmatic.jar
文件来执行此操作。我们可以通过运行
java -jar specmatic.jar compare contract_file-v1.1.yaml contract_file-v1.1.yaml
来做到这一点。

但是,我仍然找不到将其集成到我的 Spring Boot 应用程序中的方法。另外,在规范文档中,它说它支持“向后兼容性验证#NOCODE”。

谁能帮我解决这个问题...

我的问题是...

  1. 我们不能使用 pact.io 来比较两个给定的 openapi 合约文件吗?
  2. 我们不能使用 specmatic 来比较 Spring Boot 应用程序中两个给定的 openapi 合约文件吗?
  3. 如果以上两种方法都不可行,您知道还有其他方法吗? (在 Spring Boot 应用程序中比较两个给定的 openapi 合约文件以检查向后兼容性)

请帮忙解决这个问题。

谢谢。

spring-boot spring-cloud openapi backwards-compatibility pact
1个回答
0
投票

我们不能使用pact.io来比较两个给定的openapi合约文件吗?

不,Pact 不是一个基于 OpenAPI/Swagger 的工具 - 它是一个 API 合约测试工具。其目的与 API 规范的目标是正交的。

Pact 可以帮助您解决这个问题,尽管您似乎想要一个更简单的解决方案,您不了解消费者需要 API 的哪些行为,而只是想检查您的规范是否向后兼容(这些是非常不同的)并提供不同的保证和好处 - 请参阅 https://pactflow.io/blog/schemas-are-not-contracts/ 了解更多)。就其价值而言,PactFlow 确实有一个功能,可与 OpenAPI 配合使用,并为您提供比比较两个规格更多的好处。

我们可以通过运行 java -jarspecmatic.jarcomparecontract_file-v1.1.yamlcontract_file-v1.1.yaml 来实现。

但是,我仍然找不到将其集成到我的 Spring Boot 应用程序中的方法。另外,在规范文档中,它说它支持“向后兼容性验证#NOCODE”。

嗯,这取决于你所说的“无代码”是什么意思。您需要找到一种方法来生成新的 OAS 并获得旧的 OAS。一旦获得这些,您就可以运行 CLI 检查。我会将其作为 CI 构建的一部分来运行,如果它不向后兼容,则会失败。

© www.soinside.com 2019 - 2024. All rights reserved.