¡Hola! Actualmente soy un estudiante universitario que está preparando su proyecto de graduación (y también buscando trabajo...).
Mientras escribía un servidor REST API con Flask, pensé que sería bueno tener una plantilla que incluyera funciones comunes que se repiten en varios proyectos, así que hice un proyecto relacionado con esa idea.
Las funciones actuales son las siguientes.
Registro, inicio de sesión y autenticación de usuarios con JWT (autenticación con tokens Refresh y Access)
......- Autenticación con Flask-Admin (emisión automática y autenticación de cookie con token de administrador)
......- Invalidación manual de tokens (invalidación de tokens de un usuario específico que haya iniciado sesión)
......- Verificación de dirección de correo electrónico y restablecimiento de contraseña usando correo electrónico (token de correo)
Uso de funciones mediante docstring y decorator de Python
......- Definición de rutas donde el inicio de sesión es obligatorio o recomendado
......- Definición y restricción de parámetros de solicitud (gestión de campos Required/Optional)
............- Validación de entradas Header/Body/Query
......- Documentación de la descripción de la ruta / parámetros de solicitud / respuestas posibles de esa ruta
Exportación de documentación
......- Exportación como documento YAML de OpenAPI 3.0
......- Función para generar ER Diagram (salida .dot)
Entre estas funciones, la parte de inicio de sesión (autenticación JWT) y la generación de documentación OpenAPI 3 las escribí directamente usando PyJWT y apispec.
En cuanto a la generación de documentación OpenAPI 3, Flask-RESTful y Flask-RESTplus estaban en estado unmaintained, y Flask-RESTX no tenía la forma de uso que yo quería.
Además, para la parte de inicio de sesión y autenticación, Flask-Login está basado en sesiones y no sabía que existía Flask-JWT-Extended (...), así que terminé implementándolo yo mismo.
Aunque soy estudiante universitario y además lo hice con prisa, así que faltan comentarios y el código no está muy limpio, agradecería mucho que lo vieran como una PoC de cómo se podría definir una API de esta forma.
(En realidad lo publiqué una vez hace un momento, pero en la parte de funciones se perdieron todos los espacios de indentación (...), así que lo borré y lo vuelvo a publicar. ¡Gracias por su comprensión!)
1 comentarios
Y además eres estudiante de pregrado, qué genial. ¡Te apoyo!