Eat*_*age 5 microservices openapi pact
我目前正在研究 Pact,作为测试策略开发的一部分。它是一个微服务架构,并且有各种服务器到服务器的连接,我可以看到它非常有用(包括消息队列)。
然而,我无法准确理解它应该如何工作的一个地方是客户端和服务器之间的连接。在我们最常见的模式中,我们有一个 Java 微服务,充当 Typescript/Angular Web 客户端的服务器。服务器采用OpenAPI规范;具体来说,我们手动编写 OpenAPI 规范文件,然后从规范文件生成服务器和客户端代码 - 服务器代码是我们期望实现的控制器的一系列接口,客户端代码是服务和模型库客户端可以使用它向服务器发出请求。客户端上的这种模式使 HTTP 请求变得轻而易举,原因如下:
一方面,在此设置中使用 Pact 绝对可以带来一些好处:
另一方面,我也有一些担忧:
坦率地说,仅第一个积极因素就足以让我承诺加入 Pact。消费者驱动的方法使得生成存根的过程变得更加有意义。话虽这么说,负面影响肯定会让我感到厌烦。感觉工作量很大,其中大部分是引入冗余验证机制,这样我们就可以获取单一利益。
我这样做是错误的吗?我是否可以对这种方法进行简单的改变,以获得相同的好处而不引入冗余?或者我只需要接受这就是方式?
编辑:所以我开始研究使用契约生成存根服务器的工具,结果发现它非常缺乏。内置的 pact 服务器存根不支持以编程方式向正在运行的服务器添加模拟,而且我发现将 pact 转换为与其他服务器存根库一起使用的大多数库都非常小,并且维护得不是特别好。这意味着我们可能必须为存根过程构建我们自己的解决方案,这使得 Pact 的吸引力更小=/
所以这里有很多!
首先,这就是为什么模式不是合同,以及在对待它们时应该警惕的一些事情:https ://pactflow.io/blog/schemas-are-not-contracts/
上面的推理中最显着的差距(如果我理解正确的话)是您需要确保客户端/服务器库保持同步,特别是在发布阶段(共享实现在 SOAP 中很常见,并且很容易有时刻当提供者的版本与消费者不兼容时,因此需要同时部署两个组件)
至于以编程方式创建存根,您可以这样做:https://github.com/pact-foundation/pact-mock_service/blob/master/script/example.sh
但为什么不直接使用一个可以将 OAS 转变为存根服务器的库呢?
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |