L'application en question utilise connexion, qui enveloppe le flacon, pour prendre soin du serveur Web. L'API est spécifiée avec swagger. Existe-t-il un moyen facile et direct d'obtenir quelque part dans le code où les réponses http sont formulées à partir du serveur Web?Consigner toutes les réponses http avec un code d'erreur> = 400
Si possible, je voudrais éviter d'écrire 200 errorhandlers, ou les 10 plus populaires et croisant mes doigts.
api.py
import connexion
app = connexion.App(__name__,
specification_dir='../swagger/',
swagger_ui=False,
validator_map={
'body': connexion.decorators.validation.RequestBodyValidator
})
app.add_api('swagger.yml', strict_validation=True)
# If I had to use app.error_handler decorators to implement the special
# treatment of http responses with error codes, I would put it here
swagger.yml
swagger: '2.0'
info:
title: My Minimal Working Example
consumes:
- application/json
produces:
- application/json
basePath: /api/v1
paths:
'/do_something':
post:
tags:
- MyTag
operationId: entrypoint.do_something
summary: Do something on request
parameters:
- name: data
in: body
schema:
$ref: '#/definitions/data'
responses:
'200':
description: Success!
schema:
$ref: '#/definitions/Response'
'400':
description: Error!
schema:
$ref: '#/definitions/Response'
'403':
description: Not Authorized
schema:
$ref: '#/definitions/Response'
# a lot more stuff and "definitions"
Si vous n'écrivez pas de code directement et que vous utilisez simplement Swagger, vous êtes limité à ce que Swagger peut faire. Sinon, il existe des moyens de sous-classer Flask et de surcharger sa gestion des erreurs. Ne sachant pas Swagger ou Connexion, je ne sais pas si cela serait possible dans votre cas. Avez-vous le contrôle sur la classe Flask ou l'instance d'application? – davidism
Je suis en train d'écrire du code directement et j'ai le contrôle sur l'instance de l'application – Arne
Veuillez [edit] inclure un [mcve] démontrant cela. – davidism