提供者端的处理不适用于请求正文

问题描述

如果我在提供者的请求正文中添加任何内容重命名删除任何与合同不同的字段,则提供者端匹配不起作用。

例如,如果我仅在请求中删除重命名提供者的请求正文(而不是响应)中的合同文件请求正文中包含名称字段和相同的字段,则pact 不会对此进行验证。

我想在提供方确认请求正文的匹配是否有效?

我可以在协议文件中看到请求正文的匹配规则,但它似乎不起作用。

解决方法

将 Pact 合同不需要的新字段添加到提供者响应中会被简单地忽略。

为什么会这样?契约遵循Postel's Law响应中的意外元素不应该给消费者带来问题。其他消费者可能有不同但重叠的需求,因此基于这些原因构建的提供者失败是有问题的。

从我们的 docs 来看,这意味着:

发送内容要保守——当消费者项目中的模拟服务器将实际请求与预期请求进行比较时,实际请求正文中不允许包含未在预期请求正文中定义的字段。我们不希望出现真正的消费者“泄露”我们不知道的数据的情况。

对您接受的内容保持自由 - 在验证提供者项目中的协议时,响应正文和标题可能包含未在预期中定义的字段,假设您的消费者将忽略任何额外的字段。这允许提供者在不破坏现有消费者的情况下发展(与过去糟糕的 WSDL 时代不同)。

关于你的第二点:

我想在提供方确认请求正文的匹配是否有效?

听起来它正在工作。如果您更改数据类型或有意外的响应代码,它会正确识别重大更改。

如果您重命名一个消费者需要的字段,那么这听起来像是一个错误(就 Pact 功能而言,这是一个致命的错误,所以我持怀疑态度)。