docker 如何基于多个Open API规范创建模拟API?

twh00eeo  于 2022-11-03  发布在  Docker
关注(0)|答案(1)|浏览(155)

我一直在尝试mock api服务,比如Stoplight提供的服务。我想创建类似的东西,但是我一直碰壁,我无法想象为什么它会这么难弄清楚。下面是细节。
Stoplight有一个feature,其中每个项目都有自己的模拟API服务器。这意味着每当有人创建一个新的项目时,一个新的模拟服务器也会被创建,我假设这是通过一些脚本在后台自动发生的,除非它是一个真正的动态进程。Stoplight有一个开源的模拟服务器项目,称为Prism,我只能假设它是用于模拟服务器的工具。
当你运行Prism时,你必须给予它一个OAS的url。这意味着一个服务器示例可以处理一个OAS。基于这个信息,Stoplight需要为每个新项目启动一个Docker示例。这将导致很多容器,其中大多数可能从未使用过。这看起来不是一个很好的解决方案,所以他们必须做别的事情。
Prism也有通过反向代理来执行serve multiple OAS的能力。这意味着你可以使用一个基本URL来服务许多不同的OAS。然而,在幕后,Prism仍然为每个OAS运行一个容器。这是目前为止最有可能的情况,但是我不知道新的模拟服务器是如何以动态方式创建的。
有没有人对如何实现这样的场景有任何意见?每个OAS一个Docker容器真的是这样吗?如果是这样,我需要做什么来从我的后端启动、停止和重新加载容器?

eh57zj3b

eh57zj3b1#

你可以在Node.js中创建一个模拟API服务器,通过使用prism的库来支持多个API。
使用Express或任何其他Web框架创建Web服务器,并根据OpenAPI定义创建prism-http示例。根据OpenAPI文件的“servers”中定义的基本路径,将传入请求路由到不同的prism-http示例。
注意:OAS文件需要有一个没有主机部分的条目,才能使prism-http正常工作。

servers:
  - url: /foo/v1                   # <-- This is mandatory to make prism-http work
  - url: '{serverRoot}/foo/v1'     # <-- Additional entries as needed
    variables:
      serverRoot:
        default: https://my-server:8080

相关问题