我有一个 Spring Boot 应用程序,在那里我从客户端接收 openapi 合约文件。 因此,我必须将新收到的合约文件与最新的合约文件(来自数据库)进行比较,并检查它们是否向后兼容。
为此,我首先检查了 pact.io。但正如我发现的,使用 pact.io 我们只能通过测试真实端点来检查向后兼容性。 (通过针对真实端点生成合同文件,并稍后使用消费者驱动的合同测试对其进行测试)。 但是,就我而言,我无法使用真实端点对其进行测试。我只有旧合同文件和新合同文件来检查。 当我搜索这个问题时,我发现了这个链接:https://specmatic.in/comparisons/specmatic-vs-pact-io-and-pactflow-io,它说pact.io不支持合同与合同比较。而且,它还表示对合同与合同比较的空间支持。检查这张图片:
然后,我检查了specmatic,发现我们可以使用spacematic比较两个合约文件,并知道它们是否向后兼容。但我们只能在命令行中使用
specmatic.jar
文件来执行此操作。我们可以通过运行 java -jar specmatic.jar compare contract_file-v1.1.yaml contract_file-v1.1.yaml
来做到这一点。
但是,我仍然找不到将其集成到我的 Spring Boot 应用程序中的方法。另外,在规范文档中,它说它支持“向后兼容性验证#NOCODE”。
谁能帮我解决这个问题...
我的问题是...
请帮忙解决这个问题。
谢谢。
我们不能使用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 构建的一部分来运行,如果它不向后兼容,则会失败。