REST API
BCN Extractor incluye una REST API construida con FastAPI. La documentación interactiva se genera automáticamente en:
- Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc - OpenAPI JSON:
http://localhost:8000/openapi.json
Levantar el servidor
Section titled “Levantar el servidor”fastapi dev api/main.py
# o con uvicorn directamente (recomendado para producción):uvicorn api.main:app --host 0.0.0.0 --port 8000Normas
Section titled “Normas”GET /normas/ — Listar normas
Section titled “GET /normas/ — Listar normas”Retorna una lista paginada de normas almacenadas en la base de datos.
| Parámetro | Tipo | Default | Límites | Descripción |
|---|---|---|---|---|
limit | int | 100 | 1–500 | Máximo de resultados |
offset | int | 0 | ≥ 0 | Desplazamiento para paginación |
curl "http://localhost:8000/normas/?limit=10&offset=0"Respuesta:
{ "normas": [ { "norma_id": 1234567, "tipo_id": 3, "tipo_nombre": "Decreto", "numero": "42", "titulo": "Decreto N° 42 que aprueba reglamento...", "estado": "vigente", "fecha_publicacion": "2023-05-15" } ], "limit": 10, "offset": 0}GET /normas/{id} — Obtener norma por ID
Section titled “GET /normas/{id} — Obtener norma por ID”Retorna el detalle completo de una norma incluyendo su contenido en Markdown, obtenido en tiempo real desde la BCN.
curl http://localhost:8000/normas/1234567Respuesta:
{ "norma": { "numero": "42", "titulo": "Decreto N° 42...", "estado": "vigente", "fecha_publicacion": "2023-05-15", "fecha_promulgacion": "2023-04-20", "organismos": ["Ministerio de Salud"], "materias": ["salud", "reglamento"] }, "markdown": "# Decreto N° 42\n\n..."}POST /normas/batch — Obtener múltiples normas
Section titled “POST /normas/batch — Obtener múltiples normas”Retorna el detalle completo de una lista de normas en una sola llamada.
curl -X POST http://localhost:8000/normas/batch \ -H "Content-Type: application/json" \ -d '[1234567, 1234568, 1234569]'GET /normas/buscar/{query} — Buscar normas FTS
Section titled “GET /normas/buscar/{query} — Buscar normas ”Búsqueda full-text en español sobre títulos de normas.
| Parámetro | Tipo | Default | Límites | Descripción |
|---|---|---|---|---|
limit | int | 10 | 1–100 | Máximo de resultados |
offset | int | 0 | ≥ 0 | Desplazamiento para paginación |
curl "http://localhost:8000/normas/buscar/medio%20ambiente?limit=5"GET /normas/estado/{estado} — Filtrar por estado
Section titled “GET /normas/estado/{estado} — Filtrar por estado”| Parámetro | Valores válidos |
|---|---|
estado | vigente, derogada |
limit | 1–500 (default: 50) |
offset | ≥ 0 (default: 0) |
curl "http://localhost:8000/normas/estado/vigente?limit=20"GET /normas/tipo/{tipo} — Filtrar por tipo
Section titled “GET /normas/tipo/{tipo} — Filtrar por tipo”Busca por nombre o abreviatura del tipo de norma (ej: ley, decreto, res).
curl "http://localhost:8000/normas/tipo/decreto?limit=20"GET /normas/rango — Filtrar por rango de fechas
Section titled “GET /normas/rango — Filtrar por rango de fechas”| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
start_date | date | — | Fecha inicio (requerido, formato YYYY-MM-DD) |
end_date | date | hoy | Fecha fin |
date_type | string | pub | pub = publicación, prom = promulgación |
limit | int | 100 | 1–500 |
offset | int | 0 | ≥ 0 |
curl "http://localhost:8000/normas/rango?start_date=2023-01-01&end_date=2023-12-31&date_type=pub"Instituciones
Section titled “Instituciones”GET /instituciones/ — Listar instituciones
Section titled “GET /instituciones/ — Listar instituciones”curl "http://localhost:8000/instituciones/"GET /instituciones/buscar/{query} — Buscar instituciones
Section titled “GET /instituciones/buscar/{query} — Buscar instituciones”curl "http://localhost:8000/instituciones/buscar/ministerio?limit=10"GET /instituciones/stats — Estadísticas de instituciones
Section titled “GET /instituciones/stats — Estadísticas de instituciones”curl http://localhost:8000/instituciones/statsRespuesta:
{ "total": 423, "con_normas": 310, "sin_normas": 113}GET /instituciones/{id} — Obtener institución
Section titled “GET /instituciones/{id} — Obtener institución”curl http://localhost:8000/instituciones/17GET /instituciones/{id}/normas — Normas de una institución
Section titled “GET /instituciones/{id}/normas — Normas de una institución”Retorna las normas almacenadas en la base de datos para una institución, ordenadas por fecha de publicación descendente.
| Parámetro | Tipo | Default | Límites |
|---|---|---|---|
limit | int | 500 | 1–1000 |
offset | int | 0 | ≥ 0 |
curl "http://localhost:8000/instituciones/17/normas?limit=20&offset=0"PUT /instituciones/{id}/normas — Sincronizar normas de una institución
Section titled “PUT /instituciones/{id}/normas — Sincronizar normas de una institución”Descarga todas las normas de la institución desde la BCN y las guarda en la base de datos. Detecta cambios via hash MD5 y solo actualiza lo que cambió.
| Parámetro | Tipo | Descripción |
|---|---|---|
limit | int | Opcional. Limita cuántas normas sincronizar |
curl -X PUT "http://localhost:8000/instituciones/17/normas?limit=50"Respuesta:
{ "nuevas": 12, "actualizadas": 3, "sin_cambios": 35, "errores": 0}