Frontend: datos, APIs y APIs de Backstage
|
Objetivos del capítulo
|
ApisRegistry: el bus del frontend
El backend tiene coreServices; el frontend tiene ApisRegistry. Es el mismo concepto: una pieza pide lo que necesita y el shell se lo inyecta. La sala del restaurante tiene su propio sistema de pedidos: cada camarero pide al jefe de sala y el jefe le pasa lo que necesita.
Backstage expone APIs de sistema a través de refs:
-
:code:`catalogApiRef` — acceso al catalog.
-
:code:`errorApiRef` — notificación de errores.
-
:code:`identityApiRef` — usuario autenticado.
-
:code:`notificationApiRef` — toasts.
-
:code:`fetchApiRef` — fetch configurado con auth headers.
Failed to generate image: Could not find the 'mmdc' executable in PATH; add it to the PATH or specify its location using the 'mmdc' document attribute flowchart LR Comp[Component] --> Hook[useApi] Hook --> Reg[ApisRegistry] Reg --> Catalog[catalogApiRef] Reg --> Error[errorApiRef] Reg --> Identity[identityApiRef] Reg --> Notif[notificationApiRef]
Consumir el catalog con useApi
Un hook que consulta el catalog de Sazón Foods:
Unresolved directive in chapters/cap-09-frontend-datos-y-apis.adoc - include::../../chapters/chapter-09-frontend-data/src/hooks.ts[tag=useapi-hook]
|
Lo que acabas de hacer
|
|
Filtros de catalog
El parámetro
Combina con :code:`fields:` para reducir el payload. |
Consumir tu propio backend
Para llamar a un endpoint custom (como /api/sazon/status del :cap-06), usa fetchApiRef o el fetch global según el caso:
Unresolved directive in chapters/cap-09-frontend-datos-y-apis.adoc - include::../../chapters/chapter-09-frontend-data/src/hooks.ts[tag=catalog-api-consumer]
|
Proxy en desarrollo
:code:`fetch('/api/…')` desde el navegador solo funciona si el frontend tiene un proxy al backend en
En producción, el frontend se sirve detrás del mismo dominio que el backend o un proxy inverso. |
Manejo de errores
Tres reglas:
-
Nunca
console.errory ya. UsaerrorApi.post(err)para que aparezca la UI de error. -
Loading y error states son obligatorios en cualquier fetch. Muestra un
<Progress />mientras loading y un<EmptyState />si la lista está vacía. -
401/403 se manejan vía el
ErrorApi. Backstage los trata especialmente: el 401 te redirige a login.
-
Importa los refs (
catalogApiRef,errorApiRef) que necesites. -
Usa
useApi(ref)para resolverlos en componentes. -
Para datos de catálogo, prefiere
catalogApi.getEntities()sobre fetch manual. -
Para endpoints custom, configura el proxy y usa
fetchApiRef. -
Maneja loading, error y empty state en cada componente que hace fetch.
Resumen
-
ApisRegistryexpone servicios del shell a los plugins. -
useApi(ref)los resuelve en componentes. -
catalogApiRefda acceso al catalog con filtros estructurados. -
errorApi.post(err)muestra errores en la UI estándar.
Glosario del capítulo
- ApisRegistry
-
Bus de APIs del shell, equivalente frontend de
coreServices. - ref
-
Objeto
ApiRef<T>que identifica un API por su tipo T. - useApi
-
Hook que resuelve un ref en su implementación inyectada.
- fetchApiRef
-
Ref al fetch configurado con auth headers del shell.
- proxy
-
Config de
app-config.yamlque redirige paths del dev server al backend.
Próximo capítulo
Componentes, tablas y UX consistente —composición con Material UI y los componentes de @backstage/core-components.