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.

Ruta REST protegida para previsualizar aviso
add_action('rest_api_init', function (): void {
    register_rest_route('wpac/v1', '/preview', [
        'methods' => 'POST',
        'permission_callback' => fn() => current_user_can('manage_options'),
        'callback' => function (WP_REST_Request $request) {
            $tone = sanitize_key((string) $request->get_param('tone'));
            $message = sanitize_text_field((string) $request->get_param('message'));

            if (!in_array($tone, ['info', 'warning', 'success'], true)) {
                $tone = 'info';
            }

            return new WP_REST_Response([
                'status' => 'ok',
                'html' => wpac_render_notice(['tone' => $tone, 'title' => $message]),
            ], 200);
        },
    ]);
});

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 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .