API REST WordPress

Una de las características clave de WordPress es su capacidad para interactuar con otras aplicaciones a través de una API REST. Pero, ¿qué es una API REST? En pocas palabras, es un conjunto de reglas y protocolos que permiten a las aplicaciones comunicarse entre sí de manera eficiente.

Conceptos: rutas y endpoints

Además de comprender qué es una API REST, es importante entender las rutas y los endpoints. Las rutas son las direcciones que se utilizan para acceder a los recursos de una aplicación, mientras que los endpoints son los puntos finales de una ruta que ofrecen acceso a una función o conjunto de funciones. En el caso de WordPress, los endpoints de la API REST permiten acceder y manipular diferentes tipos de datos de WordPress, como publicaciones, páginas, usuarios y comentarios.

Código para functions.php

Para aprovechar al máximo la API REST de WordPress, es útil conocer una lista de funciones para functions.php que permiten añadir rutas y endpoints personalizados. Estas funciones permiten a los desarrolladores personalizar la API REST de WordPress para que se adapte a sus necesidades específicas, como crear rutas y endpoints personalizados para tipos de contenido personalizados o integrar con otras aplicaciones de terceros. Con estas funciones, las posibilidades son infinitas en cuanto a personalización de la API REST de WordPress.

Añadir endpoint personalizado

add_action( 'rest_api_init', function () {
  register_rest_route( 'myplugin/v1', '/custom-endpoint/', array(
    'methods' => 'GET',
    'callback' => 'my_custom_endpoint_callback',
  ) );
} );

function my_custom_endpoint_callback( $request ) {
  // Aquí puedes escribir tu lógica personalizada para el endpoint
  return '¡Hola! Esta es una respuesta desde mi endpoint personalizado.';
}

Mostrar rutas y endpoints

add_action( 'rest_api_init', function () {
function list_endpoints() {
  global $wp_routes;

  // Iterar por todas las rutas registradas
  foreach ( $wp_routes as $route => $handlers ) {
    // Iterar por todos los handlers registrados para esta ruta
    foreach ( $handlers as $handler ) {
      echo $route . ' - ' . $handler['callback'] . '<br>';
    }
  }
}

add_action( 'admin_menu', 'register_list_endpoints_page' );
function register_list_endpoints_page() {
  add_menu_page(
    'Listado de endpoints',
    'Listado de endpoints',
    'manage_options',
    'list-endpoints',
    'list_endpoints'
  );
}

Lista de rutas por defecto

Aquí una lista de algunas rutas que incluye un sitio de WordPress

  • Route: /
  • Route: /batch/v1
  • Route: /oembed/1.0
  • Route: /oembed/1.0/embed
  • Route: /oembed/1.0/proxy
  • Route: /wp/v2
  • Route: /wp/v2/posts
  • Route: /wp/v2/posts/(?P[\d]+)
  • Route: /wp/v2/posts/(?P[\d]+)/revisions
  • Route: /wp/v2/posts/(?P[\d]+)/revisions/(?P[\d]+)
  • Route: /wp/v2/posts/(?P[\d]+)/autosaves
  • Route: /wp/v2/posts/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/pages
  • Route: /wp/v2/pages/(?P[\d]+)
  • Route: /wp/v2/pages/(?P[\d]+)/revisions
  • Route: /wp/v2/pages/(?P[\d]+)/revisions/(?P[\d]+)
  • Route: /wp/v2/pages/(?P[\d]+)/autosaves
  • Route: /wp/v2/pages/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/media
  • Route: /wp/v2/media/(?P[\d]+)
  • Route: /wp/v2/media/(?P[\d]+)/post-process
  • Route: /wp/v2/media/(?P[\d]+)/edit
  • Route: /wp/v2/menu-items
  • Route: /wp/v2/menu-items/(?P[\d]+)
  • Route: /wp/v2/menu-items/(?P[\d]+)/autosaves
  • Route: /wp/v2/menu-items/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/blocks
  • Route: /wp/v2/blocks/(?P[\d]+)
  • Route: /wp/v2/blocks/(?P[\d]+)/revisions
  • Route: /wp/v2/blocks/(?P[\d]+)/revisions/(?P[\d]+)
  • Route: /wp/v2/blocks/(?P[\d]+)/autosaves
  • Route: /wp/v2/blocks/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/templates
  • Route: /wp/v2/templates/(?P([^\/:<>\*\?»\|]+(?:\/[^\/:<>\*\?»\|]+)?)[\/\w-]+)
  • Route: /wp/v2/templates/(?P[\d]+)/revisions
  • Route: /wp/v2/templates/(?P[\d]+)/revisions/(?P[\d]+)
  • Route: /wp/v2/templates/(?P[\d]+)/autosaves
  • Route: /wp/v2/templates/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/template-parts
  • Route: /wp/v2/template-parts/(?P([^\/:<>\*\?»\|]+(?:\/[^\/:<>\*\?»\|]+)?)[\/\w-]+)
  • Route: /wp/v2/template-parts/(?P[\d]+)/revisions
  • Route: /wp/v2/template-parts/(?P[\d]+)/revisions/(?P[\d]+)
  • Route: /wp/v2/template-parts/(?P[\d]+)/autosaves
  • Route: /wp/v2/template-parts/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/navigation
  • Route: /wp/v2/navigation/(?P[\d]+)
  • Route: /wp/v2/navigation/(?P[\d]+)/revisions
  • Route: /wp/v2/navigation/(?P[\d]+)/revisions/(?P[\d]+)
  • Route: /wp/v2/navigation/(?P[\d]+)/autosaves
  • Route: /wp/v2/navigation/(?P[\d]+)/autosaves/(?P[\d]+)
  • Route: /wp/v2/types
  • Route: /wp/v2/types/(?P[\w-]+)
  • Route: /wp/v2/statuses
  • Route: /wp/v2/statuses/(?P[\w-]+)
  • Route: /wp/v2/taxonomies
  • Route: /wp/v2/taxonomies/(?P[\w-]+)
  • Route: /wp/v2/categories
  • Route: /wp/v2/categories/(?P[\d]+)
  • Route: /wp/v2/tags
  • Route: /wp/v2/tags/(?P[\d]+)
  • Route: /wp/v2/menus
  • Route: /wp/v2/menus/(?P[\d]+)
  • Route: /wp/v2/users
  • Route: /wp/v2/users/(?P[\d]+)
  • Route: /wp/v2/users/me
  • Route: /wp/v2/users/(?P(?:[\d]+|me))/application-passwords
  • Route: /wp/v2/users/(?P(?:[\d]+|me))/application-passwords/introspect
  • Route: /wp/v2/users/(?P(?:[\d]+|me))/application-passwords/(?P[\w\-]+)
  • Route: /wp/v2/comments
  • Route: /wp/v2/comments/(?P[\d]+)
  • Route: /wp/v2/search
  • Route: /wp/v2/block-renderer/(?P[a-z0-9-]+/[a-z0-9-]+)
  • Route: /wp/v2/block-types
  • Route: /wp/v2/block-types/(?P[a-zA-Z0-9_-]+)
  • Route: /wp/v2/block-types/(?P[a-zA-Z0-9_-]+)/(?P[a-zA-Z0-9_-]+)
  • Route: /wp/v2/global-styles/themes/(?P[^\/:<>\*\?»\|]+(?:\/[^\/:<>\*\?»\|]+)?)
  • Route: /wp/v2/global-styles/(?P[\/\w-]+)
  • Route: /wp/v2/settings
  • Route: /wp/v2/themes
  • Route: /wp/v2/themes/(?P[^\/:<>\*\?»\|]+(?:\/[^\/:<>\*\?»\|]+)?)
  • Route: /wp/v2/plugins
  • Route: /wp/v2/plugins/(?P[^.\/]+(?:\/[^.\/]+)?)
  • Route: /wp/v2/sidebars
  • Route: /wp/v2/sidebars/(?P[\w-]+)
  • Route: /wp/v2/widget-types
  • Route: /wp/v2/widget-types/(?P[a-zA-Z0-9_-]+)
  • Route: /wp/v2/widget-types/(?P[a-zA-Z0-9_-]+)/encode
  • Route: /wp/v2/widget-types/(?P[a-zA-Z0-9_-]+)/render
  • Route: /wp/v2/widgets
  • Route: /wp/v2/widgets/(?P[\w\-]+)
  • Route: /wp/v2/block-directory/search
  • Route: /wp/v2/pattern-directory/patterns
  • Route: /wp-site-health/v1
  • Route: /wp-site-health/v1/tests/background-updates
  • Route: /wp-site-health/v1/tests/loopback-requests
  • Route: /wp-site-health/v1/tests/https-status
  • Route: /wp-site-health/v1/tests/dotorg-communication
  • Route: /wp-site-health/v1/tests/authorization-header
  • Route: /wp-site-health/v1/directory-sizes
  • Route: /wp-block-editor/v1
  • Route: /wp-block-editor/v1/url-details
  • Route: /wp/v2/menu-locations
  • Route: /wp/v2/menu-locations/(?P[\w-]+)
  • Route: /wp-block-editor/v1/export

Descripción de las funciones

  • add_action: Es una función del core de WordPress que permite registrar una función para que se ejecute en un punto específico del ciclo de vida de WordPress, como la carga de la página o la ejecución de una acción. Esta función es ampliamente utilizada en el desarrollo de temas y plugins de WordPress para personalizar y extender el funcionamiento de la plataforma.
  • register_rest_route: Es una función del core de WordPress que permite registrar una ruta personalizada para la REST API de WordPress. La REST API de WordPress permite a los desarrolladores interactuar con el contenido y los datos de WordPress a través de una interfaz API basada en HTTP. La función register_rest_route permite registrar una ruta personalizada, que luego puede ser utilizada para crear o actualizar contenido o realizar cualquier otra operación que esté permitida por la API.
  • callback: Es una función que se ejecuta cuando se solicita una ruta personalizada de la REST API de WordPress. Esta función recibe como parámetros la solicitud HTTP y la respuesta HTTP, y es responsable de procesar la solicitud y devolver una respuesta HTTP apropiada.
  • handler: Es una función que se ejecuta cuando se solicita un endpoint personalizado de WordPress. Esta función recibe como parámetros la solicitud HTTP y la respuesta HTTP, y es responsable de procesar la solicitud y devolver una respuesta HTTP apropiada.

Las funciones que se han proporcionado son:

  1. add_action('rest_api_init', 'register_custom_route'): Registra la función register_custom_route para que se ejecute en el evento rest_api_init. Esta función se encargará de registrar una ruta personalizada en la REST API de WordPress.
  2. function register_custom_route(): Define la función register_custom_route, que utiliza la función register_rest_route para registrar una ruta personalizada en la REST API de WordPress. Esta ruta personalizada se definirá utilizando el método GET y se llamará custom-endpoint.
  3. add_action('rest_api_init', function () use ($namespace) {...}: Registra una función anónima para que se ejecute en el evento rest_api_init. Esta función se encargará de registrar un endpoint personalizado en la REST API de WordPress. Se utiliza una función anónima en lugar de una función con nombre para mantener el espacio de nombres limpio.
  4. $namespace = 'my-namespace/v1';: Define una variable $namespace que se utilizará como el prefijo del namespace para los endpoints personalizados. Esto asegura que los endpoints personalizados no entren en conflicto con otros endpoints que puedan estar registrados en la REST API de WordPress.
  5. register_rest_route($namespace, '/custom-endpoint/(?P<id>\d+)', array(...));: Registra un endpoint personalizado en la REST API de WordPress utilizando la función register_rest_route. Este endpoint personalizado se llamará custom-endpoint y se definirá utilizando el método GET. La ruta también incluirá un parámetro dinámico id que aceptará un número entero.
  6. function my_custom_endpoint_callback($request) {...}: Define una función my_custom_endpoint_callback que se encargará de procesar la solicitud para el endpoint personalizado. Esta función recibe la solicitud HTTP como parámetro y devuelve una respuesta HTTP apropiada.

Hacer pruebas con Postman

Postman es una herramienta de colaboración y pruebas de API que permite a los desarrolladores crear, compartir, probar y documentar API de manera más eficiente. Con Postman, los usuarios pueden enviar solicitudes HTTP a una API y ver las respuestas en tiempo real, lo que facilita la depuración y el desarrollo de API. Además, Postman proporciona una interfaz de usuario fácil de usar y funciones avanzadas como la automatización de pruebas, la generación de documentación de API y la integración con sistemas de control de versiones.

Pequeña guía de Postman

Con estos sencillos pasos puedes empezar a utilizar Postman y practicar con la API REST de WordPress

  1. Descarga e instala Postman: Si aún no tienes Postman instalado en tu ordenador, lo primero que debes hacer es descargarlo e instalarlo desde su sitio web oficial.
  2. Crear una nueva solicitud en Postman: Abre Postman y haz clic en el botón «Nueva solicitud». A continuación, ingresa la URL de la API REST de WordPress que deseas probar. Por ejemplo, si deseas obtener una lista de publicaciones, ingresa la siguiente URL: http://tudominio.com/wp-json/wp/v2/posts.
  3. Seleccionar el método HTTP: Elige el método HTTP que deseas utilizar para la solicitud (GET, POST, PUT, DELETE, etc.) en la sección desplegable a la derecha de la URL.
  4. Añadir encabezados: Si es necesario, agrega encabezados a la solicitud. Por ejemplo, si deseas enviar datos de autenticación, debes agregar un encabezado de autorización. Puedes hacer esto haciendo clic en la pestaña «Encabezados» debajo de la URL y agregando los encabezados requeridos.
  5. Enviar la solicitud: Una vez que hayas configurado todo lo que necesitas, haz clic en el botón «Enviar» para enviar la solicitud. Verás la respuesta en la pestaña «Respuesta» debajo de la solicitud.
  6. Inspeccionar la respuesta: En la pestaña «Respuesta», verás la respuesta de la API REST de WordPress. Si se devuelve una respuesta JSON, Postman te la mostrará en un formato fácil de leer. Si hay algún error en la solicitud, también verás la información de error en esta pestaña.
  7. Prueba otras rutas: Para probar otras rutas de la API REST de WordPress, simplemente repite los pasos anteriores con la URL de la ruta que deseas probar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*