Documentar la API y primeros endpoints - Episodio 27

documentar la API en Flask

Intentar consumir una API sin documentación es como navegar sin brújula.

Es decir, no saber qué endpoints existen, qué datos envían o cómo estructurar las peticiones solo genera frustración.

Por eso, documentar la API para endpoints desde el inicio no es un lujo, sino una necesidad.

Y aquí estoy para contarte cómo lo hice y las herramientas que facilitaron el proceso.🚀

Índice
  1. 📅 Diario de un SaaS – La API comenzaba a tomar forma, pero necesitaba estructura y documentación.
    1. 🔥 La API funcionaba, pero... sin documentación ni control
  2. ⚠️ Problemas encontrados antes de documentar la API
    1. 🔹 Endpoints funcionando, pero sin especificaciones claras
    2. 🔹 Errores por versiones diferentes de Python y dependencias
    3. 🔹 Puertos ocupados bloqueaban el despliegue
  3. 🛠️ Soluciones Implementadas
    1. 🔹 1. Configuración de Swagger para documentar la API
    2. 🔹 2. Registro y corrección de dependencias
    3. 🔹 3. Implementación de los primeros endpoints: /register y /login
    4. 🔹 4. Solución de problemas con puertos ocupados
  4. 💡 Lecciones aprendidas al documentar la API
    1. 🔹 1. La documentación es tan importante como el código
    2. 🔹 2. Versionar dependencias evita problemas futuros
    3. 🔹 3. Los puertos ocupados pueden ser un dolor de cabeza
  5. 💡 Conclusión y Reflexión
    1. 🔹 Conclusión
    2. 🔹 Reflexión
  6. ⏩ Próximos pasos

📅 Diario de un SaaS – La API comenzaba a tomar forma, pero necesitaba estructura y documentación.

Ahora mismo estoy redactando el post nº 27.

Esto quiere decir que he librado mínimo 26 batallas anteriores de esta gran guerra de montar un SaaS desde 0.

Y además, no sé cuántos post me quedan más pero creo que es conveniente y prudente empezar a documentar el funcionamiento de la API.

🔥 La API funcionaba, pero... sin documentación ni control

Cuando los primeros endpoints empezaron a responder correctamente, sentí la primera victoria.

Pero enseguida me di cuenta de un problema:

  • No había documentación clara para entender qué datos enviaba cada endpoint.
  • Los entornos tenían versiones diferentes de dependencias, lo que generaba errores inesperados.
  • Algunos puertos ya estaban ocupados, impidiendo que la API se ejecutara correctamente.

Era momento de ordenar todo antes de que el caos se apoderara del backend. 🚀


⚠️ Problemas encontrados antes de documentar la API

🔹 Endpoints funcionando, pero sin especificaciones claras

  • Si alguien más intentaba consumir la API, no tenía ni idea de cómo usarla.
  • Era necesario definir correctamente los métodos, parámetros y respuestas.

🔹 Errores por versiones diferentes de Python y dependencias

  • En mi entorno local funcionaba, pero en el VPS algunas librerías daban errores.
  • Había que unificar las versiones y registrar todas las dependencias.

🔹 Puertos ocupados bloqueaban el despliegue

  • PostgreSQL y otros servicios estaban usando algunos puertos necesarios para Flask.
  • Tenía que reasignar los puertos y evitar conflictos.

Había que ordenar la API antes de seguir añadiendo funcionalidades.

Documentar la API en Flask y Endpoints


🛠️ Soluciones Implementadas

🔹 1. Configuración de Swagger para documentar la API

Para evitar que la API fuera una caja negra, implementamos Swagger:

pip install flask-swagger-ui

Luego, agregamos la documentación en app.py:

from flask_swagger_ui import get_swaggerui_blueprint

SWAGGER_URL = '/api/docs'
API_URL = '/static/swagger.json'

swagger_ui = get_swaggerui_blueprint(SWAGGER_URL, API_URL)
app.register_blueprint(swagger_ui, url_prefix=SWAGGER_URL)

Ahora, accediendo a /api/docs, la API mostraba su documentación interactiva. 📝

Beneficio: Cualquier desarrollador podía probar y entender los endpoints sin revisar código.


🔹 2. Registro y corrección de dependencias

Para evitar inconsistencias entre entornos, creamos un archivo de dependencias:

pip freeze > requirements.txt

En el VPS, instalamos todo con:

pip install -r requirements.txt

Beneficio: Ahora, todos los entornos usan las mismas versiones de librerías.


🔹 3. Implementación de los primeros endpoints: /register y /login

Para gestionar usuarios, creamos los endpoints de autenticación:

@app.route('/register', methods=['POST'])
def register():
    data = request.get_json()
    hashed_password = bcrypt.generate_password_hash(data['password']).decode('utf-8')
    new_user = User(username=data['username'], email=data['email'], password=hashed_password)
    db.session.add(new_user)
    db.session.commit()
    return jsonify({'message': 'Usuario registrado exitosamente'}), 201

Y el login:

@app.route('/login', methods=['POST'])
def login():
    data = request.get_json()
    user = User.query.filter_by(email=data['email']).first()
    if user and bcrypt.check_password_hash(user.password, data['password']):
        access_token = create_access_token(identity=user.username, expires_delta=timedelta(hours=1))
        return jsonify({'access_token': access_token}), 200
    return jsonify({'error': 'Credenciales incorrectas'}), 401

Beneficio: Ahora, la API permitía registrar y autenticar usuarios.


🔹 4. Solución de problemas con puertos ocupados

Para evitar conflictos, verificamos qué procesos estaban usando los puertos:

sudo netstat -tulnp | grep LISTEN

Si un puerto estaba ocupado, lo liberamos:

sudo kill -9 <PID>

Y configuramos Flask para correr en un puerto diferente:

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5001)

Beneficio: La API ya no se veía bloqueada por puertos ocupados.


💡 Lecciones aprendidas al documentar la API

🔹 1. La documentación es tan importante como el código

No sirve de nada tener una API funcional si nadie sabe cómo usarla.

🔹 2. Versionar dependencias evita problemas futuros

Sin requirements.txt, las diferencias entre entornos pueden romper la API.

🔹 3. Los puertos ocupados pueden ser un dolor de cabeza

Antes de desplegar, siempre hay que verificar qué servicios están corriendo en el servidor.


💡 Conclusión y Reflexión

🔹 Conclusión

La documentación y organización de una API no es un extra, es una necesidad.

Así que con Swagger, la API ahora es accesible para cualquier desarrollador.

Y además, al unificar dependencias y gestionar los puertos, aseguramos estabilidad en el despliegue.

🔹 Reflexión

Cuando inicias un proyecto, es fácil enfocarse en hacer que las cosas funcionen rápidamente.

Pero eso sí, si no te tomas el tiempo de documentar y optimizar, terminarás atrapado en problemas evitables.

Y ya sabes lo que dicen....cada minuto invertido en una buena estructura ahorra horas de dolores de cabeza en el futuro. 🚀

⏩ Próximos pasos

Ando pensando en los próximos pasos si será sobre:

📀 Balanceo de carga y escalabilidad del backend

📀 Implementación de backups automáticos en PostgreSQL

Cada mejora hace que la API sea más robusta y escalable. 🚀

 

Si quieres conocer otros artículos parecidos a Documentar la API y primeros endpoints - Episodio 27 puedes visitar la categoría Proyecto-IA.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir