Volver a la wiki

Endpoint GET /api/help/wiki — Proxy catálogo wiki con whitelist product

Endpoint GET /api/help/wiki — Proxy catálogo wiki con whitelist product

Endpoint del backend Django (core/api_help.py) que actúa como proxy al workspace Cloudflare Workers para obtener el catálogo de artículos wiki destinados al Help Widget de usuario. Desde la versión v1.0.58+ (commit c94e74e) aplica un filtrado por whitelist de producto en lugar de la antigua blacklist de categorías.


Referencia

CampoValor
MétodoGET
Ruta/api/help/wiki
Archivocore/api_help.py
Routerrouter (Django Ninja, prefijo /api/help)
AutenticaciónRequiere sesión autenticada (headers de workspace)

Comportamiento

Cliente (Help Widget Alpine)
  → GET /api/help/wiki
    → Django proxy (core/api_help.py)
      → GET {WORKSPACE_URL}/biblioteca/wiki?product=crearack
        ← JSON: { categories: { [key]: { label, articles[] } } }
      ← _apply_english() — traduce labels y paths
    ← JSON procesado al cliente

Parámetros de la request al workspace

ParámetroValor fijoDescripción
productcrearackFiltra server-side en D1. Solo pages con product == "crearack" se devuelven.

Constante de whitelist

# core/api_help.py
_USER_FACING_PRODUCT = "crearack"

Historial de cambios en el filtrado

v1.0.58+ (2026-04-25) — Whitelist por product

Motivación: la antigua blacklist (_PRIVATE_CATEGORIES = {"workspace"}) eliminaba categorías enteras del response Django-side, pero era frágil (cualquier nueva categoría interna quedaba expuesta hasta que se añadiera a la lista).

Cambio: el filtrado se delega al workspace pasando ?product=crearack. El corpus de D1 es la fuente de verdad — sólo las pages etiquetadas explícitamente como product=crearack llegan al usuario final.

Pages excluidas por este cambio:

Antes de v1.0.58+

_PRIVATE_CATEGORIES = {"workspace"}
# En _apply_english(): eliminaba la clave "workspace" del dict categories

Procesamiento post-proxy (_apply_english)

Tras recibir el JSON del workspace, la función _apply_english() aplica:

  1. Traducción de labels de categoría: usando _CATEGORY_EN dict (ES → EN).
  2. Traducción de títulos de artículo: usando _load_title_map() (cargado desde JSON local).
  3. Reescritura de paths: wiki/ → wiki-en/ para servir la versión en inglés al Help Widget.

Trade-offs

AspectoDescripción
CoberturaDepende de que el corpus D1 tenga product etiquetado. Pages sin product quedan fuera.
Re-taggingPendiente como parte de la iniciativa I5 del plan post-audit Supercontexto.
LatenciaEl proxy añade un RTT adicional al workspace. Timeout configurado en TIMEOUT (definido en api_help.py).

Véase también

Subir