OpenApi (Redo c) удаленные (сетевые) вложенные ссылки - PullRequest
0 голосов
/ 26 апреля 2020

У нас есть работающий сервер 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" в это.

...