У нас есть работающий сервер Redo c, который включает в себя множество файлов yaml со спецификациями API. Однако пара необходимых файлов yaml не находится на локальном (назовем это RedocServer ) компьютере.
Эти удаленные файлы доступны через службу pnet -webapi ( WebApiServer ).
Итак, скажем, чтобы получить один из этих файлов, мы используем ссылку в файле index.yaml:
paths:
/api/1:
$ref: "https:/some-address/ApiDoc.yaml"
Если ApiDo c .yaml сам по себе не имеет ссылок, для WebApiServer нет проблем просто вернуть строку, используя такой метод:
[HttpGet]
public string GetApiDoc()
{
var directoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var filePath = Path.Combine(directoryPath, "ApiDoc.yaml");
return File.ReadAllText(filePath);
}
Однако, в нашем случае, ApiDo c .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 возвращает такую строку, RedocServer , вероятно, просто попытается разрешить эти ссылки с RedocServer файлами. Но мы, очевидно, хотим убедиться, что ссылки будут разрешены на стороне WebApiServer .
Итак, вопрос в том, как правильно вернуть этот ApiDo c .yaml, не прерывая никаких ссылок ?
Мы не можем разрешить ссылки вручную, потому что объекты огромны и глубоко вложены. OpenApi. net, который мы пытались использовать, по-прежнему не может автоматически разрешать удаленные ссылки, а также не может работать с файлами без "info" и "openapi: 3.0.0" в это.