logologo
Empezar
Manual
Desarrollo
Plugins
API
Inicio
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Empezar
Manual
Desarrollo
Plugins
API
Inicio
logologo
Descripción general de RunJS
Importación de módulos
Renderizado en contenedor

Variables globales

window
document
navigator

ctx

ctx.blockModel
ctx.collection
ctx.collectionField
ctx.dataSource
ctx.dataSourceManager
ctx.element
ctx.exit()
ctx.exitAll()
ctx.filterManager
ctx.form
ctx.getModel()
ctx.getValue()
ctx.getVar()
ctx.i18n
ctx.importAsync()
ctx.initResource()
ctx.libs
ctx.location
ctx.logger
ctx.makeResource()
ctx.message
ctx.modal
ctx.model
ctx.notification
ctx.off()
ctx.on()
ctx.openView()
ctx.render()
ctx.request()
ctx.requireAsync()
ctx.resource
ctx.route
ctx.router
ctx.setValue()
ctx.sql
ctx.t()
ctx.view
Next PageDescripción general de RunJS
Aviso de traducción IA

Este documento ha sido traducido por IA. Para información precisa, consulte la versión en inglés.

#APIResource

Un recurso de API genérico para realizar solicitudes basadas en URLs, adecuado para cualquier interfaz HTTP. Hereda de la clase base FlowResource y la extiende con configuración de solicitudes y el método refresh(). A diferencia de MultiRecordResource y SingleRecordResource, APIResource no depende de un nombre de recurso; realiza solicitudes directamente por URL, lo que lo hace ideal para interfaces personalizadas, APIs de terceros y otros escenarios.

Método de creación: ctx.makeResource('APIResource') o ctx.initResource('APIResource'). Debe llamar a setURL() antes de su uso. En el contexto de RunJS, ctx.api (APIClient) se inyecta automáticamente, por lo que no es necesario llamar a setAPIClient manualmente.


#Escenarios de uso

EscenarioDescripción
Interfaz personalizadaLlamar a APIs de recursos no estándar (por ejemplo, /api/custom/stats, /api/reports/summary).
API de tercerosSolicitar servicios externos a través de una URL completa (requiere que el destino admita CORS).
Consulta de un solo usoObtención temporal de datos que son desechables y no necesitan estar vinculados a ctx.resource.
Elección entre APIResource y ctx.requestUtilice APIResource cuando se necesiten datos reactivos, eventos o estados de error; utilice ctx.request() para solicitudes simples y puntuales.

#Capacidades de la clase base (FlowResource)

Todos los recursos poseen lo siguiente:

MétodoDescripción
getData()Obtiene los datos actuales.
setData(value)Establece los datos (solo localmente).
hasData()Indica si existen datos.
getMeta(key?) / setMeta(meta)Lee o escribe metadatos.
getError() / setError(err) / clearError()Gestión del estado de error.
on(event, callback) / once / off / emitSuscripción y activación de eventos.

#Configuración de la solicitud

MétodoDescripción
setAPIClient(api)Establece la instancia de APIClient (generalmente inyectada automáticamente en RunJS).
getURL() / setURL(url)URL de la solicitud.
loadingLee o escribe el estado de carga (get/set).
clearRequestParameters()Limpia los parámetros de la solicitud.
setRequestParameters(params)Fusiona y establece los parámetros de la solicitud.
setRequestMethod(method)Establece el método de la solicitud (por ejemplo, 'get', 'post'; el valor predeterminado es 'get').
addRequestHeader(key, value) / removeRequestHeader(key)Encabezados de la solicitud.
addRequestParameter(key, value) / getRequestParameter(key) / removeRequestParameter(key)Agrega, elimina o consulta un parámetro individual.
setRequestBody(data)Cuerpo de la solicitud (utilizado para POST/PUT/PATCH).
setRequestOptions(key, value) / getRequestOptions()Opciones generales de la solicitud.

#Formato de URL

  • Estilo de recurso: Admite la abreviatura de recursos de NocoBase, como users:list o posts:get, que se concatenará con la baseURL.
  • Ruta relativa: Por ejemplo, /api/custom/endpoint, concatenada con la baseURL de la aplicación.
  • URL completa: Utilice direcciones completas para solicitudes de origen cruzado; el destino debe tener configurado CORS.

#Obtención de datos

MétodoDescripción
refresh()Inicia una solicitud basada en la URL, método, parámetros, encabezados y datos actuales. Escribe la respuesta data en setData(data) y activa el evento 'refresh'. En caso de fallo, establece setError(err) y lanza un ResourceError, sin activar el evento refresh. Requiere que api y la URL estén configurados.

#Ejemplos

#Solicitud GET básica

const res = ctx.makeResource('APIResource');
res.setURL('/api/custom/endpoint');
res.setRequestParameters({ page: 1, pageSize: 10 });
await res.refresh();
const data = res.getData();

#URL con estilo de recurso

const res = ctx.makeResource('APIResource');
res.setURL('users:list');
res.setRequestParameters({ pageSize: 20, sort: ['-createdAt'] });
await res.refresh();
const rows = res.getData()?.data ?? [];

#Solicitud POST (con cuerpo de solicitud)

const res = ctx.makeResource('APIResource');
res.setURL('/api/custom/submit');
res.setRequestMethod('post');
res.setRequestBody({ name: 'prueba', type: 'report' });
await res.refresh();
const result = res.getData();

#Escuchar el evento refresh

const res = ctx.makeResource('APIResource');
res.setURL('/api/stats');
res.on('refresh', () => {
  const data = res.getData();
  ctx.render(<div>Estadísticas: {JSON.stringify(data)}</div>);
});
await res.refresh();

#Manejo de errores

const res = ctx.makeResource('APIResource');
res.setURL('/api/may-fail');
try {
  await res.refresh();
  const data = res.getData();
} catch (e) {
  const err = res.getError();
  ctx.message.error(err?.message ?? 'La solicitud ha fallado');
}

#Encabezados de solicitud personalizados

const res = ctx.makeResource('APIResource');
res.setURL('https://api.example.com/data');
res.addRequestHeader('X-Custom-Header', 'valor');
res.addRequestParameter('key', 'xxx');
await res.refresh();

#Consideraciones

  • Dependencia de ctx.api: En RunJS, ctx.api es inyectado por el entorno; generalmente no es necesario llamar a setAPIClient manualmente. Si se utiliza en un escenario sin contexto, debe configurarlo usted mismo.
  • Refresh equivale a la solicitud: refresh() inicia una solicitud basada en la configuración actual; el método, los parámetros, los datos, etc., deben configurarse antes de la llamada.
  • Los errores no actualizan los datos: En caso de fallo, getData() mantiene su valor anterior; la información del error se puede recuperar a través de getError().
  • Frente a ctx.request: Utilice ctx.request() para solicitudes simples de una sola vez; utilice APIResource cuando se requiera gestión de datos reactivos, eventos y estado de error.

#Relacionado

  • ctx.resource - La instancia de recurso en el contexto actual.
  • ctx.initResource() - Inicializar y vincular a ctx.resource.
  • ctx.makeResource() - Crear una nueva instancia de recurso sin vincularla.
  • ctx.request() - Solicitud HTTP general, adecuada para llamadas simples y puntuales.
  • MultiRecordResource - Orientado a colecciones/listas, admite CRUD y paginación.
  • SingleRecordResource - Orientado a registros individuales.