Skip to main content

Guía del marco: proteger la clave API

Angular es un marco frontend: todo el código de su aplicación se descarga y ejecuta en el navegador del usuario. Cualquier valor incluido en el paquete, incluida una clave API configurada como constante o environment.ts, es visible para cualquiera que abra las herramientas de desarrollo o inspeccione el tráfico de la red.
@markpdf/angular nunca debe configurarse con su API tecla Flash PDF real para Markdown apuntando directamente a https://api.markpdf.tech. Siempre pasa por su propio backend que almacena la clave del lado del servidor.

Arquitectura recomendada

MarkpdfService está configurado con baseUrl apuntando a tu backend, no al API público:
app.config.ts
Su backend expone esa ruta y reenvía la solicitud al API real usando el SDK de Node.js (u otro SDK si su backend no es Node) con la clave guardada como secreto del servidor.

Ejemplo de backend de proxy (Express + @markpdf/sdk)

server/routes/markpdf.ts
Angular llama a /api/markpdf/convert, su backend Express llama al API real. El navegador nunca ve YOUR_API_KEY.

Configura MarkpdfService para hablar con tu backend

app.config.ts
MarkpdfService construye internamente solicitudes HttpClient normales; puede combinarlas con los interceptores de autenticación propios de su aplicación (JWT, cookies de sesión) como cualquier otro servicio Angular HTTP.

Interceptor de errores

app.config.ts
markpdfErrorInterceptor normaliza las respuestas de error de su backend (siempre que reenvíe status y el cuerpo { error: string } como en el ejemplo Express anterior) a instancias de MarkpdfClientError, consistentes con las documentadas por Manejo de errores.

Autenticar al usuario final contra su backend

MarkpdfService no administra las sesiones de los usuarios; eso es responsabilidad de su propia aplicación. Combínalo con tu interceptor de autenticación habitual:
app.config.ts
Este patrón (sin interfaz secreta → backend propio con clave API → API pública) es el mismo que Next.js recomienda para los controladores de ruta, solo que en Angular el “backend propio” es explícitamente un servicio separado en lugar de estar integrado en el mismo proyecto.