diff --git a/documentation/apis/administration/1.0.0/api.json b/documentation/apis/administration/1.0.0/api.json index 94a168d0..140ad968 100644 --- a/documentation/apis/administration/1.0.0/api.json +++ b/documentation/apis/administration/1.0.0/api.json @@ -1,5 +1,5 @@ { - "openapi": "3.0.0", + "openapi": "3.1.0", "info": { "description": "Description de l'API d'administration de Road2.", "version": "1.0.0", diff --git a/documentation/apis/osrm/1.0.0/api.json b/documentation/apis/osrm/1.0.0/api.json index 3ccd6078..b4fa9308 100644 --- a/documentation/apis/osrm/1.0.0/api.json +++ b/documentation/apis/osrm/1.0.0/api.json @@ -1,5 +1,5 @@ { - "openapi": "3.0.0", + "openapi": "3.1.0", "info": { "description": "Description of the OSRM API available via Road2. Only route operation in its v1 is available.", "version": "1.0.0", @@ -259,4 +259,4 @@ } } } -} \ No newline at end of file +} diff --git a/documentation/apis/simple/1.0.0/api.json b/documentation/apis/simple/1.0.0/api.json index 5dd07f64..1783072a 100644 --- a/documentation/apis/simple/1.0.0/api.json +++ b/documentation/apis/simple/1.0.0/api.json @@ -1,5 +1,5 @@ { - "openapi": "3.0.0", + "openapi": "3.1.0", "info": { "description": "Description de l'API du service d'itinéraire.", "version": "1.0.0", @@ -1297,4 +1297,4 @@ } } } -} \ No newline at end of file +} diff --git a/documentation/apis/valhalla/1.0.0/api.json b/documentation/apis/valhalla/1.0.0/api.json index f908a172..be1ab051 100644 --- a/documentation/apis/valhalla/1.0.0/api.json +++ b/documentation/apis/valhalla/1.0.0/api.json @@ -1,5 +1,5 @@ { - "openapi": "3.0.0", + "openapi": "3.1.0", "info": { "description": "Description of the Valhalla API available via Road2. Only the isochrone API is available for now.", "version": "1.0.0", @@ -175,4 +175,4 @@ } } } - } \ No newline at end of file + } diff --git a/documentation_en/apis/administration/1.0.0/api.json b/documentation_en/apis/administration/1.0.0/api.json index e6ee622f..b1e9564e 100644 --- a/documentation_en/apis/administration/1.0.0/api.json +++ b/documentation_en/apis/administration/1.0.0/api.json @@ -1,5 +1,5 @@ { - "openapi": "3.0.0", + "openapi": "3.1.0", "info": { "description": "Description de l'API d'administration de Road2.", "version": "1.0.0", @@ -1859,4 +1859,4 @@ } } } - } \ No newline at end of file + } diff --git a/documentation_en/apis/simple/1.0.0/api.json b/documentation_en/apis/simple/1.0.0/api.json index 5dd07f64..1783072a 100644 --- a/documentation_en/apis/simple/1.0.0/api.json +++ b/documentation_en/apis/simple/1.0.0/api.json @@ -1,5 +1,5 @@ { - "openapi": "3.0.0", + "openapi": "3.1.0", "info": { "description": "Description de l'API du service d'itinéraire.", "version": "1.0.0", @@ -1297,4 +1297,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/js/apis/admin/1.0.0/index.js b/src/js/apis/admin/1.0.0/index.js index 8a167555..16cfc0d4 100644 --- a/src/js/apis/admin/1.0.0/index.js +++ b/src/js/apis/admin/1.0.0/index.js @@ -22,10 +22,22 @@ router.all("/", function(req, res) { var apiJsonPath = path.join(__dirname, '..', '..', '..','..','..', 'documentation','apis','administration', '1.0.0', 'api.json'); LOGGER.info("Utilisation fichier .json '"+ apiJsonPath + "' pour initialisation swagger-ui de l'API administration en version 1.0.0"); var swaggerDocument = require(apiJsonPath); -router.use('/openapi', swaggerUi.serve, swaggerUi.setup(swaggerDocument)); +router.get('/openapi/swagger.json', (req, res) => { + res.setHeader('Content-Type', 'application/json'); + res.send(swaggerDocument); +}); +router.use( + '/openapi', + swaggerUi.serve, + swaggerUi.setup(null, { + swaggerOptions: { + url: '/admin/1.0.0/openapi/swagger.json' + } + }) +); // Version -// Pour avoir la version de Road2 utilisée +// Pour avoir la version de Road2 utilisée router.route("/version") .get(async function(req, res, next) { @@ -152,7 +164,7 @@ router.route("/services/:service") // Envoie à l'administrateur et récupération de l'objet réponse const serviceResponse = administrator.getServiceConfiguration(serviceRequest.service); - + // Formattage de la réponse res.set('content-type', 'application/json'); res.status(200).json(serviceResponse); @@ -221,22 +233,22 @@ router.route("/services/:service/projections/:projection") const parameters = req.params; LOGGER.debug(parameters); - try { + try { // Vérification des paramètres de la requête const projectionRequest = controller.checkProjectionParameters(parameters); LOGGER.debug(projectionRequest); - + // Envoie à l'administrateur et récupération de l'objet réponse const projectionResponse = await administrator.computeRequest(projectionRequest.service, projectionRequest); LOGGER.debug(projectionResponse); - + // Formattage de la réponse const userResponse = controller.writeProjectionResponse(projectionResponse); LOGGER.debug(userResponse); res.set('content-type', 'application/json'); - res.status(200).json(userResponse); + res.status(200).json(userResponse); } catch (error) { return next(error); @@ -262,7 +274,7 @@ router.use(notFoundError); */ function logError(err, req, res, next) { - + let message = { request: req.originalUrl, query: req.query, @@ -290,14 +302,14 @@ function logError(err, req, res, next) { */ function sendError(err, req, res, next) { - // On ne veut pas le même comportement en prod et en dev + // On ne veut pas le même comportement en prod et en dev if (process.env.NODE_ENV === "production") { if (err.status) { - // S'il y a un status dans le code, alors cela veut dire qu'on veut remonter l'erreur au client + // S'il y a un status dans le code, alors cela veut dire qu'on veut remonter l'erreur au client res.status(err.status); res.json({ error: {message: err.message}}); } else { - // S'il n'y a pas de status dans le code alors on ne veut pas remonter l'erreur + // S'il n'y a pas de status dans le code alors on ne veut pas remonter l'erreur res.status(500); res.json({ error: {message: "Internal Server Error"}}); } @@ -310,7 +322,7 @@ function sendError(err, req, res, next) { more: err }}); } else { - // En dev, on veut faire remonter n'importe quelle erreur + // En dev, on veut faire remonter n'importe quelle erreur res.status(err.status || 500); res.json({ error: {message: err.message}}); } diff --git a/src/js/apis/osrm/1.0.0/index.js b/src/js/apis/osrm/1.0.0/index.js index 61470844..8e542452 100644 --- a/src/js/apis/osrm/1.0.0/index.js +++ b/src/js/apis/osrm/1.0.0/index.js @@ -22,7 +22,19 @@ router.all("/", function(req, res) { let apiJsonPath = path.join(__dirname, '..', '..', '..','..','..', 'documentation','apis','osrm', '1.0.0', 'api.json'); LOGGER.info("using file '"+ apiJsonPath + "' to initialize swagger-ui for OSRM API version 1.0.0"); let swaggerDocument = require(apiJsonPath); -router.use('/openapi', swaggerUi.serve, swaggerUi.setup(swaggerDocument)); +router.get('/openapi/swagger.json', (req, res) => { + res.setHeader('Content-Type', 'application/json'); + res.send(swaggerDocument); +}); +router.use( + '/openapi', + swaggerUi.serve, + swaggerUi.setup(null, { + swaggerOptions: { + url: '/osrm/1.0.0/openapi/swagger.json' + } + }) +); // GetCapabilities router.all("/resources", function(req, res, next) { @@ -116,7 +128,7 @@ function logError(err, req, res, next) { } else { LOGGER.error(message); } - + next(err); } diff --git a/src/js/apis/simple/1.0.0/index.js b/src/js/apis/simple/1.0.0/index.js index 5a505a54..16aca3dd 100644 --- a/src/js/apis/simple/1.0.0/index.js +++ b/src/js/apis/simple/1.0.0/index.js @@ -19,7 +19,7 @@ router.use(express.json( { type: (req) => { // Le seul content-type accepté a toujours été application/json, on rend cela plus explicite - // Cette fonction permet d'arrêter le traitement de la requête si le content-type n'est pas correct. + // Cette fonction permet d'arrêter le traitement de la requête si le content-type n'est pas correct. // Sans elle, le traitement continue. if (req.get('Content-Type') !== "application/json") { throw errorManager.createError(" Wrong Content-Type. Must be 'application/json' ", 400); @@ -28,8 +28,8 @@ router.use(express.json( } }, verify: (req, res, buf, encoding) => { - // Cette fonction permet de vérifier que le JSON envoyé est valide. - // Si ce n'est pas le cas, le traitement de la requête est arrêté. + // Cette fonction permet de vérifier que le JSON envoyé est valide. + // Si ce n'est pas le cas, le traitement de la requête est arrêté. try { JSON.parse(buf); } catch (error) { @@ -37,7 +37,7 @@ router.use(express.json( } } } -)); +)); // --- // Accueil de l'API @@ -51,7 +51,19 @@ router.all("/", function(req, res) { var apiJsonPath = path.join(__dirname, '..', '..', '..','..','..', 'documentation','apis','simple', '1.0.0', 'api.json'); LOGGER.info("Utilisation fichier .json '"+ apiJsonPath + "' pour initialisation swagger-ui de l'API simple en version 1.0.0"); var swaggerDocument = require(apiJsonPath); -router.use('/openapi', swaggerUi.serve, swaggerUi.setup(swaggerDocument)); +router.get('/openapi/swagger.json', (req, res) => { + res.setHeader('Content-Type', 'application/json'); + res.send(swaggerDocument); +}); +router.use( + '/openapi', + swaggerUi.serve, + swaggerUi.setup(null, { + swaggerOptions: { + url: '/simple/1.0.0/openapi/swagger.json' + } + }) +); // GetCapabilities router.all("/getcapabilities", function(req, res) { @@ -69,7 +81,7 @@ router.all("/getcapabilities", function(req, res) { let getCapabilities = req.app.get(uid + "-getcap"); LOGGER.debug(getCapabilities); - // Modification si Host ou X-Forwarded-Host précisè dans l'en-tête de la requête + // Modification si Host ou X-Forwarded-Host précisè dans l'en-tête de la requête // il est récupéré par express dans req.host if (req.hostname) { @@ -171,7 +183,7 @@ router.route("/route") }); // Nearest -// Pour trouver les points du graphe les plus proche d'un autre +// Pour trouver les points du graphe les plus proche d'un autre router.route("/nearest") .get(async function(req, res, next) { @@ -211,9 +223,9 @@ router.route("/nearest") } }) - + .post(async function(req, res, next) { - + LOGGER.debug("requete POST sur /simple/1.0.0/nearest?"); LOGGER.debug(req.originalUrl); @@ -247,8 +259,8 @@ router.route("/nearest") } catch (error) { return next(error); } - - + + }); /* Génération d'isochrone. */ @@ -302,7 +314,7 @@ router.route("/isochrone") LOGGER.debug(parameters); try { - + // Vérification des paramètres de la requête const isochroneRequest = controller.checkIsochroneParameters(parameters, service, "POST"); LOGGER.debug(isochroneRequest); @@ -356,7 +368,7 @@ function logError(err, req, res, next) { } else { LOGGER.error(message); } - + next(err); } @@ -369,14 +381,14 @@ function logError(err, req, res, next) { */ function sendError(err, req, res, next) { - // On ne veut pas le même comportement en prod et en dev + // On ne veut pas le même comportement en prod et en dev if (process.env.NODE_ENV === "production") { if (err.status) { - // S'il y a un status dans le code, alors cela veut dire qu'on veut remonter l'erreur au client + // S'il y a un status dans le code, alors cela veut dire qu'on veut remonter l'erreur au client res.status(err.status); res.json({ error: {errorType: err.code, message: err.message}}); } else { - // S'il n'y a pas de status dans le code alors on ne veut pas remonter l'erreur + // S'il n'y a pas de status dans le code alors on ne veut pas remonter l'erreur res.status(500); res.json({ error: {errorType: "internal", message: "Internal Server Error"}}); } @@ -389,7 +401,7 @@ function sendError(err, req, res, next) { more: err }}); } else { - // En dev, on veut faire remonter n'importe quelle erreur + // En dev, on veut faire remonter n'importe quelle erreur res.status(err.status || 500); res.json({ error: {errorType: err.code, message: err.message}}); }