OpenApi (Redoc) 远程(网络)嵌套引用
OpenApi (Redoc) remote (network) nested references
我们有一个 运行 Redoc 服务器,其中包含一堆符合 api 规范的 yaml 文件。但是,一些必要的 yaml 文件不在本地(我们称之为 RedocServer)机器上。
这些远程文件可以通过 aspnet-webapi 服务访问 (WebApiServer)。
所以,比方说,要获取其中一个文件,我们在 index.yaml 文件中使用引用:
paths:
/api/1:
$ref: "https:/some-address/ApiDoc.yaml"
如果 ApiDoc.yaml 本身没有引用,WebApiServer 简单地 return 一个字符串使用这样的方法是没有问题的:
[HttpGet]
public string GetApiDoc()
{
var directoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var filePath = Path.Combine(directoryPath, "ApiDoc.yaml");
return File.ReadAllText(filePath);
}
然而,在我们的例子中,ApiDoc.yaml 对其中的另一个文件有一些巨大的嵌套引用。类似这样的东西,暗示引用对象内部有引用:
post:
tags:
- Test
summary: Test
operationId: Test
consumes:
- application/json
produces:
- application/json
requestBody:
content:
application/json:
schema:
$ref: "../ApiDoc2.yaml#/components/schemas/ApiRequest"
responses:
200:
description: OK
content:
application/json:
schema:
$ref: "../ApiDoc3.yaml#/components/schemas/ApiResponse"
如果 WebApiServer return 是这样的字符串,RedocServer 可能会尝试用 [=29 解析这些引用=]RedocServer 个文件。但我们显然希望确保在 WebApiServer 端解析引用。
所以,问题是,如何在不破坏任何引用的情况下正确地 return 那 ApiDoc.yaml?
我们无法手动解析引用,因为对象很大且嵌套很深。我们尝试使用的 OpenApi.net 仍然无法自动解析远程引用,而且似乎无法处理没有 "info" 和 "openapi:3.0.0" 部分的文件它。
事实证明,Redoc 自动解析远程引用,将 url 中的本地路径替换为远程 url.
简单地说:您可以 return 一个类似的字符串或文件,一切都应该正常工作。
我们有一个 运行 Redoc 服务器,其中包含一堆符合 api 规范的 yaml 文件。但是,一些必要的 yaml 文件不在本地(我们称之为 RedocServer)机器上。
这些远程文件可以通过 aspnet-webapi 服务访问 (WebApiServer)。
所以,比方说,要获取其中一个文件,我们在 index.yaml 文件中使用引用:
paths:
/api/1:
$ref: "https:/some-address/ApiDoc.yaml"
如果 ApiDoc.yaml 本身没有引用,WebApiServer 简单地 return 一个字符串使用这样的方法是没有问题的:
[HttpGet]
public string GetApiDoc()
{
var directoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var filePath = Path.Combine(directoryPath, "ApiDoc.yaml");
return File.ReadAllText(filePath);
}
然而,在我们的例子中,ApiDoc.yaml 对其中的另一个文件有一些巨大的嵌套引用。类似这样的东西,暗示引用对象内部有引用:
post:
tags:
- Test
summary: Test
operationId: Test
consumes:
- application/json
produces:
- application/json
requestBody:
content:
application/json:
schema:
$ref: "../ApiDoc2.yaml#/components/schemas/ApiRequest"
responses:
200:
description: OK
content:
application/json:
schema:
$ref: "../ApiDoc3.yaml#/components/schemas/ApiResponse"
如果 WebApiServer return 是这样的字符串,RedocServer 可能会尝试用 [=29 解析这些引用=]RedocServer 个文件。但我们显然希望确保在 WebApiServer 端解析引用。
所以,问题是,如何在不破坏任何引用的情况下正确地 return 那 ApiDoc.yaml?
我们无法手动解析引用,因为对象很大且嵌套很深。我们尝试使用的 OpenApi.net 仍然无法自动解析远程引用,而且似乎无法处理没有 "info" 和 "openapi:3.0.0" 部分的文件它。
事实证明,Redoc 自动解析远程引用,将 url 中的本地路径替换为远程 url.
简单地说:您可以 return 一个类似的字符串或文件,一切都应该正常工作。