我正在Haskell中构建一些小型服务。我想使服务之间的界限正式,这样构建过程会告诉开发人员合同是否被违反
举一个简单的例子,假设我们有一个带有POST / users路由的API。它应该将用户添加到用户队列。然后我们有一个worker,它从队列中读取并处理新用户。
两者之间的合同如下:
{ name : String, age : Int }
我如何强制执行此操作,以便在任何一项服务时出现构建错误:
如果所有代码都在一个存储库中,这将很容易,但我了解它们的微服务的主要目标之一是使它们独立。如何通过单独的回购来完成?
我有想法为合同创建第三个回购,并且两个服务都依赖于它。如果它包含一些Haskell类型,那么API和worker都可以包含它并检查它们的实现。如果我这样做,我应该如何处理版本控制?它们应该包含它作为git子模块,还是通过包管理器(允许取决于旧版本,这可能是坏的)?
如果我想更新User的架构,我将如何构建内容以便在更新之前在两个服务中出现错误?
对于使用protobuf的人,您在哪里存储与这两个服务相关的文件?可以在实现中使用protobuf表面错误吗?
答案 0 :(得分:1)
我认为微服务不习惯于边界检查或执行的编译时或构建时支持。
相反,您将在运行时以两种方式强制执行这些规则: