AJAX y REST API en plugins: interacción moderna con seguridad

Diseñas endpoints y acciones asíncronas para tu plugin, eligiendo entre `admin-ajax` y REST según contexto, con permisos, nonces y respuestas limpias.

Un plugin moderno no debería recargar página completa para tareas simples como validar una regla, previsualizar un aviso o limpiar caché.

En esta lección implementarás interacción asíncrona usando dos vías: `admin-ajax.php` y REST API.

Aprenderás cuándo conviene cada una, cómo proteger endpoints y cómo devolver respuestas consistentes para frontend/admin.

El objetivo es que tu plugin sea rápido en UX, pero igual de sólido en seguridad.

  • Ambos enfoques son válidos; la decisión depende del flujo y de la arquitectura.
  • `admin-ajax` encaja bien en acciones internas de admin rápidas y acotadas.
  • REST API es ideal cuando quieres endpoints reutilizables, desacoplados y fáciles de consumir desde editor, frontend o integraciones externas.
  • Caso real: un plugin empezó con AJAX para todo y luego migrar a móvil/integraciones fue caro; diseñar endpoints REST desde el inicio habría reducido retrabajo.
  • Admin interno rápido: AJAX puede bastar.

AJAX clásico vs REST: elige por contexto, no por costumbre

Ambos enfoques son válidos; la decisión depende del flujo y de la arquitectura.

`admin-ajax` encaja bien en acciones internas de admin rápidas y acotadas.

REST API es ideal cuando quieres endpoints reutilizables, desacoplados y fáciles de consumir desde editor, frontend o integraciones externas.

Caso real: un plugin empezó con AJAX para todo y luego migrar a móvil/integraciones fue caro; diseñar endpoints REST desde el inicio habría reducido retrabajo.

  • Admin interno rápido: AJAX puede bastar.
  • API reutilizable y escalable: REST suele ser mejor.
  • Seguridad obligatoria en ambos: permisos + nonce/cookies.

Diseña rutas REST con contrato claro

Un endpoint profesional define método, payload, validación y permisos explícitos.

Registra rutas en `rest_api_init`, define métodos (`GET/POST`) y valida parámetros de entrada.

Usa `permission_callback` con capacidades concretas; no dejes endpoints write abiertos por defecto.

Responde con estructuras estables (`status`, `data`, `message`) para facilitar consumo en frontend.

AJAX en admin: acciones rápidas y controladas

Para tareas internas simples, `wp_ajax_*` sigue siendo práctico.

Registra acción con `wp_ajax_{action}` y verifica nonce con `check_ajax_referer`.

Devuelve respuestas con `wp_send_json_success` o `wp_send_json_error` para mantener consistencia.

No olvides comprobar capacidades dentro del callback, incluso si el botón está oculto en la UI.

Caso real: endpoint expuesto sin permisos

Un endpoint funcional no es suficiente; debe ser seguro por diseño.

En una intranet, un endpoint de plugin devolvía datos de configuración sin `permission_callback` real. Resultado: usuarios sin permiso accedían a información sensible.

La corrección incluyó permisos estrictos, validación de parámetros y minimización de campos devueltos.

Aprendizaje clave: define tu modelo de autorización antes de publicar la ruta.

WordPress Plugin
10

AJAX y REST API en plugins: interacción moderna con seguridad

Diseñas endpoints y acciones asíncronas para tu plugin, eligiendo entre `admin-ajax` y REST según contexto, con permisos, nonces y respuestas limpias.

Código del tema: register_rest_route

📘 Teoría

AJAX clásico vs REST: elige por contexto, no por costumbre

Ambos enfoques son válidos; la decisión depende del flujo y de la arquitectura.

`admin-ajax` encaja bien en acciones internas de admin rápidas y acotadas.

REST API es ideal cuando quieres endpoints reutilizables, desacoplados y fáciles de consumir desde editor, frontend o integraciones externas.

Caso real: un plugin empezó con AJAX para todo y luego migrar a móvil/integraciones fue caro; diseñar endpoints REST desde el inicio habría reducido retrabajo.

  • Admin interno rápido: AJAX puede bastar.
  • API reutilizable y escalable: REST suele ser mejor.
  • Seguridad obligatoria en ambos: permisos + nonce/cookies.

Diseña rutas REST con contrato claro

Un endpoint profesional define método, payload, validación y permisos explícitos.

1

Registra rutas en `rest_api_init`, define métodos (`GET/POST`) y valida parámetros de entrada.

2

Usa `permission_callback` con capacidades concretas; no dejes endpoints write abiertos por defecto.

3

Responde con estructuras estables (`status`, `data`, `message`) para facilitar consumo en frontend.

AJAX en admin: acciones rápidas y controladas

Para tareas internas simples, `wp_ajax_*` sigue siendo práctico.

Registra acción con `wp_ajax_{action}` y verifica nonce con `check_ajax_referer`.

Devuelve respuestas con `wp_send_json_success` o `wp_send_json_error` para mantener consistencia.

No olvides comprobar capacidades dentro del callback, incluso si el botón está oculto en la UI.

1

Buenas prácticas

En callbacks AJAX del plugin.

  • check_ajax_referer
  • current_user_can
  • wp_send_json_*
2

Errores comunes

Qué evitar en endpoints asíncronos.

  • Respuestas HTML inconsistentes.
  • Sin manejo de errores.
  • Sin validación de entrada.

Caso real: endpoint expuesto sin permisos

Un endpoint funcional no es suficiente; debe ser seguro por diseño.

1

En una intranet, un endpoint de plugin devolvía datos de configuración sin `permission_callback` real. Resultado: usuarios sin permiso accedían a información sensible.

2

La corrección incluyó permisos estrictos, validación de parámetros y minimización de campos devueltos.

3

Aprendizaje clave: define tu modelo de autorización antes de publicar la ruta.

🧪 Aprende probando

Ejemplo Ejemplo guiado: combinar AJAX para mantenimiento y REST para preview Montamos dos canales: uno interno de admin y otro API reutilizable para previsualización.

🏁 Retos

Reto Reto real: endpoint REST para listar reglas activas Crea una ruta `GET /wpac/v1/rules` con autorización y respuesta estructurada.

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros. culTest

La hice en febrero de 2026 para facilitar el aprendizaje de mis alumnos. La idea es aprender desarrollo web practicando y que el proyecto siga creciendo con nuevos temas, tests y retos.

Está inspirada en MDN, W3Schools, CodePen, Manz y muchos otros sitios de documentación sobre desarrollo web. Quería combinar teoría útil, ejemplos ejecutables, retos y el sistema de tests que ya tenía en culTest. culTest

Si te gustó, si no te gustó o si quieres escribirme, puedes hacerlo en cristianeslava@gmail.com