Ocelot不支持一下几点…
- 分块编码 -
Ocelot
将始终获取body
大小并返回Content-Length
头。 如果这不适合你的场景,只能表示抱歉! - 转发
host
头 - 您发给Ocelot
的host
头不会转发给下游服务。显然这会打破一切 😦 Swagger
- 我已经多次看过从Ocelot
的ocelot.json
构建swagger.json
,但它看起来不适合
我有Ocelot
就够了。如果您想在Ocelot
中使用Swagger
,那么您必须生成自己的swagger.json
,并在Startup.cs
或Program.cs
中执行以下操作。 下面的代码示例注册了一个加载您手动生成的swagger.json
并将其返回到/swagger/v1/swagger.json
的中间件。 然后使用Swashbuckle.AspNetCore
注册SwaggerUI
中间件。
app.Map("/swagger/v1/swagger.json", b =>
{
b.Run(async x => {
var json = File.ReadAllText("swagger.json");
await x.Response.WriteAsync(json);
});
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Ocelot");
});
app.UseOcelot().Wait();
我认为Swagger
没意义的主要原因是我们已经在ocelot.json
中手动编写了我们的定义。如果我们希望针对Ocelot
开发的人员能够查看可用的路由,那么可以与他们共享ocelot.json
(这应该与访问仓库一样简单)或者使用Ocelot
管理API,以便他们可以查询Ocelot
的配置。
除此之外,许多人还会配置Ocelot
将所有流量例如/products/{everything}
代理到产品服务,如果您解析并将其转换为Swagger
路径,则不会描述实际可用的内容。另外Ocelot
没有有关下游服务可以返回模型的概念,并且连接到上述一个端口可以返回多个模型的问题。Ocelot
不知道哪些模块需要使用POST
还是PUT
,所以会变得混乱,最后当swagger.json
在运行时发生变化是,Swashbuckle
包不会重新加载它。Ocelot
的配置可以在运行时更改,这样导致Swagger
和Ocelot
的信息不匹配。除非我推出我自己的Swagger
实现。
如果有人想要对Ocelot API
进行简单的测试,我建议使用Postman
。甚至可以写一些将ocelot.json
映射到postman json
规范的东西。但是我不打算这样做。