快速添加Schema以提供OpenAPI 2.0定义对象的有意义的名称

问题描述 投票:0回答:1

我使用 fastify 创建了一些模式定义,如下所示,其中我使用“标题”来为模型提供有意义的名称。

fastify.addSchema({
        $id: 'persistence-query-params',
        title: "PersistenceQueryParams",   // Here
        type: 'object',
        description: 'Persistence Service GET API URL query specification. Applicable for GET API only.',
        properties: {
               ...........
        },
    });

但是,当我查看从 swagger 生成的 json 时(我使用 fastify-swagger: 4.8.4 和 fastify: 3.20.1),我看到了这个

  def-7:                    ## Here
    title: PersistenceQueryParams
    type: object
    description: >-
      Persistence Service GET API URL query specification. Applicable for GET
      API only.
    properties:

这会在 OpenAPI 2.0 https://editor.swagger.io/ 中出现,当加载从该架构生成的 json 时。

我也尝试过添加名称字段:

name: "PersistenceQueryParams",

然而没有运气。

如何在 OpenAPI 2.0 中创建有意义的名称,而不是 def-0、def-1 等?

谢谢, 普拉迪普

openapi fastify
1个回答
0
投票

对于现在阅读本文的任何人来说,现在都可以做到这一点。您需要像这样覆盖配置中的

refResolver

fastify.register(swagger, {
    refResolver: {
      buildLocalReference(json, baseUri, fragment, i) {
        // This mirrors the default behaviour
        // see: https://github.com/fastify/fastify-swagger/blob/1b53e376b4b752481643cf5a5655c284684383c3/lib/mode/dynamic.js#L17
        if (!json.title && json.$id) {
          json.title = json.$id;
        }
        // Fallback if no $id is present
        if (!json.$id) {
          return `def-${i}`;
        }

        return `${json.$id}`;
      },
    },
    openapi: {
      // Your spec here...
    }
  });

可点击评论链接:

https://github.com/fastify/fastify-swagger/blob/1b53e376b4b752481643cf5a5655c284684383c3/lib/mode/dynamic.js#L17

现在您的裁判将拥有有意义的名字。

© www.soinside.com 2019 - 2024. All rights reserved.