es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Swagger UI no puede leer JSON referenciado.

Así que estoy creando una API utilizando express, cors y sequelize. Ahora quiero que mi API tenga una documentación adecuada y encontré que Swagger UI es muy útil para esto.

En cuanto a mi problema: Como mi base de datos no es solo una tabla y las rutas son más complicadas, quería separar el JSON en varios archivos para tener una mejor visión general. Ahora resulta que la referencia que intento usar en el index.json simplemente no funciona. Parece que ni siquiera se toca el info.json.

Aquí tienes mi configuración de Swagger UI al comienzo de mi archivo de índice de nodo:

const express = require("express");
const cors = require("cors");
const app = express();
const db = require("./app/models");
const swaggerDocument = require("./app/swagger/index.json");
const swaggerUi = require("swagger-ui-express");
./app/swagger/index.json` se ve así:

{
    "swagger": "2.0",
    "info": {
        "$ref": "info.json"
    },
    "consumes": [
        "application/json"
    ],
    "produces": [
        "application/json"
    ]
}

Y el archivo info.json al que se hace referencia, que está en la misma carpeta que index.json, se ve así:

{
    "title": "App",
    "version": "0.1",
    "description": "App API Documentation",
    "contact": {
        "name": "My Name",
        "url": "foo.bar"
    },
    "servers": [
        "http://localhost:8000"
    ]
}

En caso de que sea útil: ejecuto todo en docker-compose.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución

    El problema podría ser causado por el hecho de que el $ref en el archivo index.json no está funcionando correctamente. Puedes intentar usar la ruta real al archivo info.json en lugar del $ref.

    Reemplaza el $ref en el objeto info en index.json con la ruta a info.json de esta manera:

    {
        "swagger": "2.0",
        "info": {
            "title": "App",
            "version": "0.1",
            "description": "Documentación de la API de la aplicación",
            "contact": {
                "name": "Mi Nombre",
                "url": "foo.bar"
            },
            "servers": [
                "http://localhost:8000"
            ]
        },
        "consumes": [
            "application/json"
        ],
        "produces": [
            "application/json"
        ]
    }
    

    Y luego actualiza la referencia a index.json en tu código de esta manera:

    const swaggerDocument = require("./app/swagger/index.json");
    

    Esto debería hacer que Swagger UI funcione correctamente con los archivos JSON separados.

    Si el problema persiste, es posible que desees verificar si las rutas a los archivos JSON son correctas, especialmente si se ejecuta en Docker-compose.

Comments are closed.