Skip to content

Commit 1268779

Browse files
authored
chore(openapi): add definition link in ui (#121)
1 parent 1072bc6 commit 1268779

File tree

9 files changed

+77
-41
lines changed

9 files changed

+77
-41
lines changed

documentation/apis/administration/1.0.0/api.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"openapi": "3.0.0",
2+
"openapi": "3.1.0",
33
"info": {
44
"description": "Description de l'API d'administration de Road2.",
55
"version": "1.0.0",

documentation/apis/osrm/1.0.0/api.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"openapi": "3.0.0",
2+
"openapi": "3.1.0",
33
"info": {
44
"description": "Description of the OSRM API available via Road2. Only route operation in its v1 is available.",
55
"version": "1.0.0",
@@ -259,4 +259,4 @@
259259
}
260260
}
261261
}
262-
}
262+
}

documentation/apis/simple/1.0.0/api.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"openapi": "3.0.0",
2+
"openapi": "3.1.0",
33
"info": {
44
"description": "Description de l'API du service d'itinéraire.",
55
"version": "1.0.0",
@@ -1297,4 +1297,4 @@
12971297
}
12981298
}
12991299
}
1300-
}
1300+
}

documentation/apis/valhalla/1.0.0/api.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"openapi": "3.0.0",
2+
"openapi": "3.1.0",
33
"info": {
44
"description": "Description of the Valhalla API available via Road2. Only the isochrone API is available for now.",
55
"version": "1.0.0",
@@ -175,4 +175,4 @@
175175
}
176176
}
177177
}
178-
}
178+
}

documentation_en/apis/administration/1.0.0/api.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"openapi": "3.0.0",
2+
"openapi": "3.1.0",
33
"info": {
44
"description": "Description de l'API d'administration de Road2.",
55
"version": "1.0.0",

documentation_en/apis/simple/1.0.0/api.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"openapi": "3.0.0",
2+
"openapi": "3.1.0",
33
"info": {
44
"description": "Description de l'API du service d'itinéraire.",
55
"version": "1.0.0",
@@ -1297,4 +1297,4 @@
12971297
}
12981298
}
12991299
}
1300-
}
1300+
}

src/js/apis/admin/1.0.0/index.js

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,22 @@ router.all("/", function(req, res) {
2222
var apiJsonPath = path.join(__dirname, '..', '..', '..','..','..', 'documentation','apis','administration', '1.0.0', 'api.json');
2323
LOGGER.info("Utilisation fichier .json '"+ apiJsonPath + "' pour initialisation swagger-ui de l'API administration en version 1.0.0");
2424
var swaggerDocument = require(apiJsonPath);
25-
router.use('/openapi', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
25+
router.get('/openapi/swagger.json', (req, res) => {
26+
res.setHeader('Content-Type', 'application/json');
27+
res.send(swaggerDocument);
28+
});
29+
router.use(
30+
'/openapi',
31+
swaggerUi.serve,
32+
swaggerUi.setup(null, {
33+
swaggerOptions: {
34+
url: '/admin/1.0.0/openapi/swagger.json'
35+
}
36+
})
37+
);
2638

2739
// Version
28-
// Pour avoir la version de Road2 utilisée
40+
// Pour avoir la version de Road2 utilisée
2941
router.route("/version")
3042

3143
.get(async function(req, res, next) {
@@ -152,7 +164,7 @@ router.route("/services/:service")
152164

153165
// Envoie à l'administrateur et récupération de l'objet réponse
154166
const serviceResponse = administrator.getServiceConfiguration(serviceRequest.service);
155-
167+
156168
// Formattage de la réponse
157169
res.set('content-type', 'application/json');
158170
res.status(200).json(serviceResponse);
@@ -221,22 +233,22 @@ router.route("/services/:service/projections/:projection")
221233
const parameters = req.params;
222234
LOGGER.debug(parameters);
223235

224-
try {
236+
try {
225237

226238
// Vérification des paramètres de la requête
227239
const projectionRequest = controller.checkProjectionParameters(parameters);
228240
LOGGER.debug(projectionRequest);
229-
241+
230242
// Envoie à l'administrateur et récupération de l'objet réponse
231243
const projectionResponse = await administrator.computeRequest(projectionRequest.service, projectionRequest);
232244
LOGGER.debug(projectionResponse);
233-
245+
234246
// Formattage de la réponse
235247
const userResponse = controller.writeProjectionResponse(projectionResponse);
236248
LOGGER.debug(userResponse);
237249

238250
res.set('content-type', 'application/json');
239-
res.status(200).json(userResponse);
251+
res.status(200).json(userResponse);
240252

241253
} catch (error) {
242254
return next(error);
@@ -262,7 +274,7 @@ router.use(notFoundError);
262274
*/
263275

264276
function logError(err, req, res, next) {
265-
277+
266278
let message = {
267279
request: req.originalUrl,
268280
query: req.query,
@@ -290,14 +302,14 @@ function logError(err, req, res, next) {
290302
*/
291303

292304
function sendError(err, req, res, next) {
293-
// On ne veut pas le même comportement en prod et en dev
305+
// On ne veut pas le même comportement en prod et en dev
294306
if (process.env.NODE_ENV === "production") {
295307
if (err.status) {
296-
// S'il y a un status dans le code, alors cela veut dire qu'on veut remonter l'erreur au client
308+
// S'il y a un status dans le code, alors cela veut dire qu'on veut remonter l'erreur au client
297309
res.status(err.status);
298310
res.json({ error: {message: err.message}});
299311
} else {
300-
// S'il n'y a pas de status dans le code alors on ne veut pas remonter l'erreur
312+
// S'il n'y a pas de status dans le code alors on ne veut pas remonter l'erreur
301313
res.status(500);
302314
res.json({ error: {message: "Internal Server Error"}});
303315
}
@@ -310,7 +322,7 @@ function sendError(err, req, res, next) {
310322
more: err
311323
}});
312324
} else {
313-
// En dev, on veut faire remonter n'importe quelle erreur
325+
// En dev, on veut faire remonter n'importe quelle erreur
314326
res.status(err.status || 500);
315327
res.json({ error: {message: err.message}});
316328
}

src/js/apis/osrm/1.0.0/index.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,19 @@ router.all("/", function(req, res) {
2222
let apiJsonPath = path.join(__dirname, '..', '..', '..','..','..', 'documentation','apis','osrm', '1.0.0', 'api.json');
2323
LOGGER.info("using file '"+ apiJsonPath + "' to initialize swagger-ui for OSRM API version 1.0.0");
2424
let swaggerDocument = require(apiJsonPath);
25-
router.use('/openapi', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
25+
router.get('/openapi/swagger.json', (req, res) => {
26+
res.setHeader('Content-Type', 'application/json');
27+
res.send(swaggerDocument);
28+
});
29+
router.use(
30+
'/openapi',
31+
swaggerUi.serve,
32+
swaggerUi.setup(null, {
33+
swaggerOptions: {
34+
url: '/osrm/1.0.0/openapi/swagger.json'
35+
}
36+
})
37+
);
2638

2739
// GetCapabilities
2840
router.all("/resources", function(req, res, next) {
@@ -116,7 +128,7 @@ function logError(err, req, res, next) {
116128
} else {
117129
LOGGER.error(message);
118130
}
119-
131+
120132
next(err);
121133
}
122134

src/js/apis/simple/1.0.0/index.js

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ router.use(express.json(
1919
{
2020
type: (req) => {
2121
// Le seul content-type accepté a toujours été application/json, on rend cela plus explicite
22-
// Cette fonction permet d'arrêter le traitement de la requête si le content-type n'est pas correct.
22+
// Cette fonction permet d'arrêter le traitement de la requête si le content-type n'est pas correct.
2323
// Sans elle, le traitement continue.
2424
if (req.get('Content-Type') !== "application/json") {
2525
throw errorManager.createError(" Wrong Content-Type. Must be 'application/json' ", 400);
@@ -28,16 +28,16 @@ router.use(express.json(
2828
}
2929
},
3030
verify: (req, res, buf, encoding) => {
31-
// Cette fonction permet de vérifier que le JSON envoyé est valide.
32-
// Si ce n'est pas le cas, le traitement de la requête est arrêté.
31+
// Cette fonction permet de vérifier que le JSON envoyé est valide.
32+
// Si ce n'est pas le cas, le traitement de la requête est arrêté.
3333
try {
3434
JSON.parse(buf);
3535
} catch (error) {
3636
throw errorManager.createError("Invalid request body. Error during the parsing of the body: " + error.message, 400);
3737
}
3838
}
3939
}
40-
));
40+
));
4141
// ---
4242

4343
// Accueil de l'API
@@ -51,7 +51,19 @@ router.all("/", function(req, res) {
5151
var apiJsonPath = path.join(__dirname, '..', '..', '..','..','..', 'documentation','apis','simple', '1.0.0', 'api.json');
5252
LOGGER.info("Utilisation fichier .json '"+ apiJsonPath + "' pour initialisation swagger-ui de l'API simple en version 1.0.0");
5353
var swaggerDocument = require(apiJsonPath);
54-
router.use('/openapi', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
54+
router.get('/openapi/swagger.json', (req, res) => {
55+
res.setHeader('Content-Type', 'application/json');
56+
res.send(swaggerDocument);
57+
});
58+
router.use(
59+
'/openapi',
60+
swaggerUi.serve,
61+
swaggerUi.setup(null, {
62+
swaggerOptions: {
63+
url: '/simple/1.0.0/openapi/swagger.json'
64+
}
65+
})
66+
);
5567

5668
// GetCapabilities
5769
router.all("/getcapabilities", function(req, res) {
@@ -69,7 +81,7 @@ router.all("/getcapabilities", function(req, res) {
6981
let getCapabilities = req.app.get(uid + "-getcap");
7082
LOGGER.debug(getCapabilities);
7183

72-
// Modification si Host ou X-Forwarded-Host précisè dans l'en-tête de la requête
84+
// Modification si Host ou X-Forwarded-Host précisè dans l'en-tête de la requête
7385
// il est récupéré par express dans req.host
7486
if (req.hostname) {
7587

@@ -171,7 +183,7 @@ router.route("/route")
171183
});
172184

173185
// Nearest
174-
// Pour trouver les points du graphe les plus proche d'un autre
186+
// Pour trouver les points du graphe les plus proche d'un autre
175187
router.route("/nearest")
176188

177189
.get(async function(req, res, next) {
@@ -211,9 +223,9 @@ router.route("/nearest")
211223
}
212224

213225
})
214-
226+
215227
.post(async function(req, res, next) {
216-
228+
217229
LOGGER.debug("requete POST sur /simple/1.0.0/nearest?");
218230
LOGGER.debug(req.originalUrl);
219231

@@ -247,8 +259,8 @@ router.route("/nearest")
247259
} catch (error) {
248260
return next(error);
249261
}
250-
251-
262+
263+
252264
});
253265

254266
/* Génération d'isochrone. */
@@ -302,7 +314,7 @@ router.route("/isochrone")
302314
LOGGER.debug(parameters);
303315

304316
try {
305-
317+
306318
// Vérification des paramètres de la requête
307319
const isochroneRequest = controller.checkIsochroneParameters(parameters, service, "POST");
308320
LOGGER.debug(isochroneRequest);
@@ -356,7 +368,7 @@ function logError(err, req, res, next) {
356368
} else {
357369
LOGGER.error(message);
358370
}
359-
371+
360372
next(err);
361373
}
362374

@@ -369,14 +381,14 @@ function logError(err, req, res, next) {
369381
*/
370382

371383
function sendError(err, req, res, next) {
372-
// On ne veut pas le même comportement en prod et en dev
384+
// On ne veut pas le même comportement en prod et en dev
373385
if (process.env.NODE_ENV === "production") {
374386
if (err.status) {
375-
// S'il y a un status dans le code, alors cela veut dire qu'on veut remonter l'erreur au client
387+
// S'il y a un status dans le code, alors cela veut dire qu'on veut remonter l'erreur au client
376388
res.status(err.status);
377389
res.json({ error: {errorType: err.code, message: err.message}});
378390
} else {
379-
// S'il n'y a pas de status dans le code alors on ne veut pas remonter l'erreur
391+
// S'il n'y a pas de status dans le code alors on ne veut pas remonter l'erreur
380392
res.status(500);
381393
res.json({ error: {errorType: "internal", message: "Internal Server Error"}});
382394
}
@@ -389,7 +401,7 @@ function sendError(err, req, res, next) {
389401
more: err
390402
}});
391403
} else {
392-
// En dev, on veut faire remonter n'importe quelle erreur
404+
// En dev, on veut faire remonter n'importe quelle erreur
393405
res.status(err.status || 500);
394406
res.json({ error: {errorType: err.code, message: err.message}});
395407
}

0 commit comments

Comments
 (0)