Mis Documentos

Barra lateral de múltiples raíces

flex-layout

  • Getting Started

  • Guides

  • Reference

typed-rx-http

  • Getting Started

  • Guides

  • Reference

global-rx-state

  • Getting Started

  • Guides

  • Reference

webflux-fe-dev-assistant

reactive-mongo-dsl

Inicio Rápido

Cliente HTTP seguro basado en RxJS para TypeScript + (opcional) adaptador Next.js/RSocket.


Características clave
  • Inyección de tipos de rutas estilo OpenAPI obtenidos de esquemas derivados de Swagger/OpenAPI / AsyncAPI / contratos personalizados, etc. (por convención, paths) para asegurar la estabilidad del tipo de solicitud.
  • Todas las API devuelven RxJS Observable.
  • El núcleo es independiente del marco (no depende de Next.js).
  • Las funciones específicas de Next.js se separan en el punto de entrada @byeolnaerim/typed-rx-http/next → Next.js solo es necesario al importar /next.
  • Las funciones específicas de RSocket se separan en el punto de entrada @byeolnaerim/typed-rx-http/rsocket → RSocket solo es necesario al importar /rsocket.
Instalación
npm
bash
Punto de entrada.
Core (independiente del framework)
ts
Adaptador de Next.js (opcional).
ts

En proyectos que no utilizan Next.js, no importe /next.

Adaptador de RSocket (opcional).

Instale el paquete peer solo en proyectos que utilizan RSocket.

bash
ts

En proyectos que no utilizan RSocket, no importe /rsocket.

Uso del Core.

1) Preparar tipo Paths (generalmente OpenAPI paths).

Paths de createHttpClient<Paths>() representan el tipo que expresa la "especificación de solicitud (ruta)". En la documentación, se llama convencionalmente paths, pero no es necesario que sea OpenAPI/Swagger, ni que se llame paths.

Sin embargo, el núcleo utiliza internamente la restricción OpenApiPathsLike, por lo que Paths debe tener una forma similar a los paths de OpenAPI como se muestra a continuación.

  • Clave superior: cadena de ruta URL (por ejemplo, "/users/{id}").
  • Clave inferior: método HTTP (get/post/put/delete/patch …).
  • Dentro de cada método, existen campos como parameters.query/path/header/cookie, requestBody, responses (o nunca).

El núcleo se refiere principalmente a los siguientes campos en esta estructura para construir el tipo de ServiceArguments.

  • url: keyof Paths.
  • method: keyof Paths[url].
  • queryString: parameters.query.
  • pathVariable: parameters.path.
  • body: requestBody.

Ej: la salida de openapi-typescript suele tener el siguiente formato (con algunas abreviaciones).

ts
ts
2) Crear HeaderStore

HeaderStore es un simple almacén en memoria para gestionar los encabezados básicos en CSR.

ts
3) Crear cliente HTTP
  • headerStore es opcional, pero se recomienda incluirlo si se utilizan encabezados básicos/autenticación de sesión en CSR.
  • headersProvider se utiliza cuando se necesita calcular encabezados por solicitud, como en SSR/multitenencia.
ts
4) Llamada a la API (tipo seguro)

El tipo de solicitud (url/método/pathVariable/queryString/cuerpo) se determina a partir del tipo inyectado por el usuario en createHttpClient<Paths>() (por convención, rutas de OpenAPI). El tipo de respuesta es elegido por el llamador como genérico R en callApi<R>() (el núcleo no infiere automáticamente de responses).

ts
Envoltura de respuesta (ResponseWrapper) — opcional

Esta biblioteca no obliga a la envoltura de respuestas. Se puede elegir el formato de respuesta genérico por API.

Respuesta envuelta
ts
Respuesta sin envolver
ts
Streaming (NDJSON)

Cuando el servidor envía NDJSON (un JSON por línea), se utiliza callApiStream. Si no hay encabezado Accept, se establece application/x-ndjson como valor predeterminado.

ts
Cache CSR (cache del cliente)

Funciones proporcionadas por createCsrCache<CacheName>:

  • callApiCsrCache(callApiFn, serviceArgs, cacheOptions)
  • removeCsrCache(cacheName) — admite tanto el nombre del cache como cadenas.
ts
Plugin de autenticación basado en sesión (opcional)

createSessionAuth separa la lógica de autenticación de sesión del núcleo, permitiendo agregarla o quitarla como opción.

Funcionamiento:

  • Mantener Authorization en headerStore
  • Sincronizar token con ensureToken$() (/api/auth/token)
  • Al ocurrir un 401, intenta refrescar una vez (/api/auth/token/refresh) y luego reintenta la solicitud original.
  • Si el refresh falla, realiza logout (/api/auth/logout) y pasa el error.
  • Los cambios en el estado de inicio de sesión se manejan externamente con el callback onLoginChange.
ts

Si solo se necesita sincronizar el token sin refresh/retry:

ts
Manejo de errores

Si no es 2xx, se lanza HttpResponseError (incluyendo status, response, args, data).

Compatibilidad heredada: si el cuerpo de error tiene la forma { resultType: ... }, se lanza ese objeto tal cual.

ts
Adaptador de Next.js (/next)
redirectToUnauthorizedOnServer401

redirectToUnauthorizedOnServer401 es la implementación básica (función de conveniencia) que realiza un redireccionamiento cuando ocurre un 401 en el entorno SSR de Next.js (App Router).

ts

Reglas de funcionamiento (fijas):

  • Destino de redirección: /unauthorized
  • queryString: redirect_uri=<página actual> + logout=true
  • La página actual se lee del encabezado x-page-url (si no existe, se usa /).

Es decir, use estas reglas de ruta/query solo si coinciden con su proyecto. Si la ruta es diferente o las reglas de query son distintas, implemente onServer401 directamente como se muestra a continuación y inyecte.

ts
callApiSsrCache

Este es un asistente de caché SSR basado en next/cache(unstable_cache) de Next.

  • GET + cacheTime > 0 → caché forzada + revalidar
  • De lo contrario → no-store
  • Inyección de Cookie / Authorization por solicitud a través de headersProvider
  • Si ocurre 401 y hay onServer401, se ejecuta (normalmente redirect())
ts
Ejemplo de integración de Next.js: código completo de rxjsHttpService/commonService

El siguiente rxjsHttpService.ts es el adaptador HTTP común del proyecto que se refiere al commonServiceFile del ejemplo de generador posterior. No es un archivo generado por la biblioteca, sino que es gestionado directamente por el proyecto, exportando el cliente central + autenticación de sesión + caché CSR + asistente de caché SSR en un solo lugar. A continuación se muestra el código completo.

rxjsHttpService.ts
ts
Referencia de API (núcleo)
createHttpClient<Paths>(opciones)

Retorna:

  • callApi<R>(args): Observable<R>
  • callApiStream<RChunk>(args): Observable<RChunk>
  • uploadFile({ file, url, ifNoneMatch?, headers? }): Observable<Response>
  • createSSEObservable<R>(args): Observable<R>

Opciones:

  • baseUrl: string
  • headerStore?: HeaderStore
  • headersProvider?: () => Record<string, string> | Promise<Record<string, string>>
  • dropAuthWhenCacheControl?: boolean (valor por defecto: true)
  • onServer401?: () => void | Promise<void>
createHeaderStore(initial?)

get(), set(), merge(), remove(), clear()

createCsrCache<CacheName>()
  • callApiCsrCache(callApiFn, serviceArgs, cacheForService)
  • removeCsrCache(cacheName) (tipo + cadena)
createSessionAuth(options)
  • withSessionAuth(), withEnsureToken()
  • ensureToken$(), refreshToken$(), logout$()
Requisitos de tiempo de ejecución
  • Uso de fetch / Response API (rxjs/fetch)
  • Streaming (NDJSON) requiere ReadableStream + TextDecoder
  • SSE requiere EventSource

Está disponible en la mayoría de los navegadores modernos y en el tiempo de ejecución de Next.js. Puede requerir un polyfill en un tiempo de ejecución de Node personalizado.

Auto Node Script: Generación de código OpenAPI/Swagger (opcional)

Este paquete proporciona, además del cliente HTTP en tiempo de ejecución, un script de Node que genera código de tipo/servicio a partir de JSON de OpenAPI/Swagger. Este script es una función opcional.

Los usuarios de @byeolnaerim/typed-rx-http, /next, /rsocket no necesitan ejecutar este script ni instalar openapi-typescript.

ts
Aislamiento de dependencias

La generación de tipos OpenAPI requiere el CLI de openapi-typescript. Sin embargo, este paquete no incluye openapi-typescript en las dependencias generales.

La biblioteca @byeolnaerim/typed-rx-http utiliza TypeScript 6.0.3 en devDependencies.typescript. Los puntos de entrada de typed-rx-http, /next, /rsocket y la construcción de la biblioteca mantienen este estándar de TypeScript 6.0.3.

Sin embargo, openapi-typescript puede requerir una versión específica de TypeScript 5.x, por lo que el script de auto nodo de OpenAPI se ejecuta en un entorno temporal separado con openapi-typescript y [email protected]. Este entorno temporal no cambia el devDependencies.typescript 6.0.3 de la biblioteca y no utiliza la versión de typescript o openapi-typescript instalada en el proyecto del usuario.

El valor por defecto es generar y ejecutar el siguiente comando solo en el momento de la ejecución del script automático.

bash

Por lo tanto, la forma de uso no cambia. Se puede llamar al script de nodo automático como antes, y solo se utiliza un entorno aislado de TypeScript 5.9.3 en la etapa de generación de tipos de OpenAPI. Los usuarios que no utilizan el script automático no están atados a openapi-typescript ni a TypeScript 5.9.3.

Si es necesario, puedes fijar el comando directamente con openApiTypescriptCommand.

ts

O puedes cambiar solo la versión del paquete que configura el comando por defecto.

ts
Archivos generados

La configuración predeterminada genera los siguientes archivos.

text

apiUnionArrays.ts genera no solo enums del esquema OpenAPI, sino también enums de parámetros de consulta, ruta, encabezado y cookie como arreglos constantes. También maneja los items.enum de los parámetros de consulta en arreglo.

Monitoreo de EventStream
ts
Solicitud HTTP única
ts
Generar desde un archivo local
ts

Ejemplo de integración de proyecto existente: WebFlux + generación automática de Swagger

A partir de aquí, es un ejemplo de integración de un proyecto que utiliza Swagger en el backend junto con el servicio de generación automática. Las funcionalidades de uso del Core y las opciones seleccionadas se pueden usar solo con typed-rx-http, y el flujo a continuación se aplica adicionalmente en proyectos que utilizan la generación automática de servicios basada en Swagger.

1. Escriba el endpoint REST en el backend.

El código del backend se escribe como de costumbre. En este ejemplo, se recibe el nombre como variable de ruta y el mensaje como parámetro de consulta. Monoy se responde.

TypedRxHttpExampleRouter.java
java
2. Generar servicio de Front en Swagger.

Recibe el del backend. swagger.jsony genera los archivos de tipo y servicio. Esta tarea se puede llamar una vez al ejecutar el servidor de desarrollo o conectarse con un script de vigilancia.

generateSwagger.cjs
js
3. Enviar solicitud con la función generada.

Puede cambiar a continuación. Código del Backenddel elemento objetivo y ResultadoPuede hacer clic para abrir la pantalla de ejecución a la derecha. Cambie los valores y presione el botón de solicitud. Parte visible en el proyecto real.Código del Front

TypedRxHttpRequestExample.tsx
tsx
© 2026 Byeolnaerim. Todos los derechos reservados.IntroducciónPolítica de privacidad