Crea tu Propia API REST desde Cero con FastAPI y Python

Tiempo de lectura: 2 minutos

FastAPI es una herramienta moderna y poderosa para construir APIs REST de manera sencilla y eficiente. En este tutorial, aprenderás a construir una API REST básica para gestionar tareas (un clásico: to-do list).

Gasolinera futurista - Pexels

Requisitos previos

  • Conocimientos básicos de Python.
  • Tener Python 3.7+ instalado en tu sistema.

Paso 1: Configurar el Entorno

  1. Crea un entorno virtual para mantener las dependencias organizadas: python -m venv venv source venv/bin/activate # O venv\Scripts\activate en Windows
  2. Instala FastAPI y Uvicorn: pip install fastapi uvicorn

Paso 2: Crear el Proyecto

Crea una estructura de proyecto sencilla:

todo_api/
├── app.py
├── models.py
└── requirements.txt

Guarda tus dependencias con:

pip freeze > requirements.txt

Paso 3: Definir las Tareas con models.py

Crea un modelo simple para las tareas utilizando Pydantic (una librería integrada en FastAPI).

from pydantic import BaseModel

class Task(BaseModel):
    id: int
    title: str
    description: str
    completed: bool = False

Paso 4: Crear la API en app.py

Vamos a definir los endpoints para gestionar las tareas.

from fastapi import FastAPI, HTTPException
from models import Task

app = FastAPI()

# Base de datos simulada
tasks = []

@app.get("/")
def read_root():
    return {"message": "Bienvenido a la API de tareas 🚀"}

@app.get("/tasks")
def get_tasks():
    return tasks

@app.post("/tasks", status_code=201)
def create_task(task: Task):
    tasks.append(task)
    return task

@app.get("/tasks/{task_id}")
def get_task(task_id: int):
    for task in tasks:
        if task.id == task_id:
            return task
    raise HTTPException(status_code=404, detail="Task not found")

@app.put("/tasks/{task_id}")
def update_task(task_id: int, updated_task: Task):
    for index, task in enumerate(tasks):
        if task.id == task_id:
            tasks[index] = updated_task
            return updated_task
    raise HTTPException(status_code=404, detail="Task not found")

@app.delete("/tasks/{task_id}", status_code=204)
def delete_task(task_id: int):
    global tasks
    tasks = [task for task in tasks if task.id != task_id]
    return {"message": "Task deleted"}

Paso 5: Ejecutar el Servidor

Levanta tu API con Uvicorn:

uvicorn app:app --reload

Esto abrirá tu servidor en http://127.0.0.1:8000.


Paso 6: Probar la API con Swagger UI

Accede a la documentación automática generada por FastAPI en http://127.0.0.1:8000/docs.
Ahí podrás interactuar con tu API y probar todos los endpoints.


Bonus: Mejorar tu API

  1. Persistencia de Datos: Conecta tu API a una base de datos como SQLite o MongoDB.
  2. Autenticación: Agrega autenticación JWT para proteger tus endpoints.
  3. Despliegue: Despliega tu API en servicios como Heroku o AWS.

Deja un comentario