Cómo eliminar las rutas y puntos finales predeterminados de la API REST de WordPress

Publicado: 2018-07-31

La API REST de WordPress se introdujo en el núcleo en la versión 4.7 (Vaughan) en diciembre de 2016. Como cualquier otro cambio significativo realizado en el núcleo de WP, se debatió ferozmente (en este momento, julio de 2018, Gutenberg es objeto de tal debate/ controversia). Al final, no pasó nada. A aquellos a los que no les importaba la API REST todavía no les importa. Aquellos a los que les importa crearon algunas aplicaciones, integraciones, complementos y otros proyectos geniales.

Cuando la API REST de #wordpress se fusionaba con el núcleo v4.7, ¡la gente se estaba volviendo loca! Igual que se asustan cuando sucede cualquier cambio. Al final, todo sale bien.

HAGA CLIC PARA TUITAR

Y ya que estamos en el tema de proyectos geniales. ¿Sabes que los más exitosos comienzan con una página próximamente? Y en muchos casos, es una página próximamente que se creó con el complemento Próximamente y modo de mantenimiento.

Próximamente y modo de mantenimiento

Este complemento viene con un generador de arrastrar y soltar, más de 170 temas, la mejor configuración de SEO de su clase, servicios de respuesta automática y correo electrónico, y muchas otras características que le permitirán crear la página perfecta próximamente en minutos. Y además de todo esto, el complemento está integrado con Depositphotos, lo que significa que puede encontrar las mejores imágenes directamente desde el complemento. Pero en caso de que no seas fanático de la colección que ofrece Depositphotos, Yay Images también es una excelente fuente de contenido de stock.

Pero basta de eso, volvamos a nuestro tema principal, REST API.

Nos preocupamos por la API REST y la utilizamos cuando creamos SaaS con tecnología WP. Es estable, rápido, fácil de usar, encaja perfectamente en WP y en la mayoría de los casos está bien documentado. Si no sabe qué es la API REST, probablemente esta no sea la publicación para usted, pero consulte qué es la API REST (video y texto) y tal vez la use en su próximo proyecto.

¿Ruta? punto final? ¿No es todo lo mismo?

No, no es lo mismo. La diferencia es sutil para la mayoría de las personas, y usan los términos ruta y punto final indistintamente, pero no es tan complicado. La ruta es más o menos la URL. Es el "nombre" utilizado para acceder a un punto final. En una sola ruta, puede tener múltiples puntos finales porque el punto final que use depende del tipo de solicitud HTTP que use. GET , POST , PUT o DELETE pueden, y normalmente sirven, para diferentes propósitos. Si accede a yoursite.com/wp-json/v2/posts/1 a través de GET , obtendrá los detalles de la publicación con ID n.º 1. El uso de DELETE en la misma ruta llamará a un punto final diferente (o función si lo desea) que elimina esa publicación. El manual oficial de la API REST tiene más información sobre este tema, así que profundice en los detalles.

¡Las rutas y los puntos finales de la API REST de #wordpress no son lo mismo! Una ruta es el "nombre" utilizado para acceder a un punto final. Una sola ruta generalmente se asocia con múltiples puntos finales.

HAGA CLIC PARA TUITAR

¿Por qué eliminaría las rutas o puntos finales predeterminados de la API REST de WP?

Como discutimos en el artículo sobre la eliminación de las reglas de reescritura predeterminadas, hay cientos de razones por las que un desarrollador de WordPress haría esto.
“Hará que WordPress sea más rápido porque no tiene que analizar todos esos puntos finales”. Todavía es algo con lo que no estoy de acuerdo y creo que la ganancia será de menos de un milisegundo, pero no duele.

Le gusta mantener las cosas limpias y, dado que no está utilizando la API REST, ¿por qué tener rutas API? Claro, tiene sentido. Pero en ese caso, use un complemento para deshabilitar la API REST por completo.

Y luego está la razón por la que deshabilitamos las rutas predeterminadas (y los puntos finales). Usamos mucho los puntos finales personalizados de la API REST, pero no necesitamos los predeterminados. Por lo tanto, es bueno mantener las cosas claras y limpias. Tampoco puede dañar la seguridad, ya que estamos exponiendo menos datos al duro mundo exterior.

Muéstrame los puntos finales de API predeterminados

La referencia del punto final está disponible en el manual de la API REST. Más o menos cualquier dato que esté disponible públicamente también estará disponible a través de la API REST. Una solicitud de ejemplo a demo.wp-api.org/wp-json/wp/v2/posts mostrará diez publicaciones en formato JSON. Si desea una versión legible por humanos de esa respuesta, deberá decodificar la respuesta JSON. Lo mismo ocurre con las páginas, categorías y otras estructuras de datos. La estructura de datos y los puntos finales son muy similares, como puede ver si examina la referencia.

La otra forma de ver las rutas predeterminadas es agregar este código al archivo functions.php de su tema y luego abrir yoursite.com/wp-json/. Habilite enlaces bonitos si aún no lo ha hecho.

add_filter( 'rest_endpoints', 'show_default_endpoints' );
 
function show_default_endpoints( $endpoints ) { 
  var_export( array_keys( $endpoints ) );
  die;
}

Muestra los 31 puntos finales REST predeterminados. El número es, por supuesto, susceptible de cambiar a medida que se agregan nuevas funcionalidades básicas. Y será diferente si tiene algún complemento que agregue puntos finales personalizados.

Eliminación de los puntos finales predeterminados

El código anterior requiere cambios mínimos. Devuelve una matriz vacía y todos los puntos finales desaparecen.

add_filter( 'rest_endpoints', 'remove_default_endpoints' );
 
function remove_default_endpoints( $endpoints ) { 
  return array( );
}

"Todos los puntos finales" también incluye sus puntos finales personalizados, por lo que es aconsejable no eliminarlos. Aquí hay una manera fácil de mantenerlos activos:

add_filter( 'rest_endpoints', 'remove_default_endpoints_smarter' );
 
function remove_default_endpoints_smarter( $endpoints ) { 
  $prefix = 'your_custom_endpoint_prefix';

  foreach ( $endpoints as $endpoint => $details ) {
    if ( !fnmatch( '/' . $prefix . '/*', $endpoint, FNM_CASEFOLD ) ) {
      unset( $endpoints[$endpoint] );
    }
  }

  return $endpoints;
}

Simplemente omita los puntos finales con su prefijo personalizado y manténgalos en la matriz. No olvide devolver la matriz.

Personalización del prefijo de URL REST

Los puntos finales personalizados, a pesar de ser personalizados, usan el mismo prefijo que los puntos finales predeterminados. Se ven como mysite.com/wp-json/custom-endpoint/. Tal vez lo encuentre feo o no le gusten las cosas predeterminadas. Cambiarlo es cuestión de una línea de código. Para fines de prueba, coloque el código a continuación en functions.php del tema y, después de guardar, abra el Panel de control - Configuración - Enlaces permanentes para vaciar las reglas de reescritura.

add_filter( 'rest_url_prefix', 'rest_url_prefix' );

function rest_url_prefix( ) {
  return 'api';
}

Con el filtro de arriba, sus puntos finales serán mysite.com/api/custom-endpoint/ y al abrir la antigua URL mysite.com/wp-json/custom-endpoint/ obtendrá un error 404.

Asegúrese de incluir un número de versión en sus puntos finales personalizados, ya que WP no agrega automáticamente un prefijo. Un prefijo de número de versión garantiza que los cambios en el futuro no afecten a los clientes que utilizan los puntos finales antiguos. Simplemente incluya el prefijo de la versión cuando llame a register_rest_route() para obtener algo como mysite.com/api/v1/custom-endpoint/ y mantenga todos sus puntos finales detrás de ese "v1" para que pueda tener "v2", etc. más adelante.

Pruebe sus cambios

Eliminar o modificar las rutas y puntos finales de la API REST no supondrá ninguna diferencia en el 98 % de los sitios de WP. "¿Por qué?" – Porque no usan la API REST en absoluto. Pero si el tuyo lo hace, asegúrate de probar las aplicaciones conectadas porque, como con todo, los cambios pueden romper las cosas. Y es mejor detectar un error hoy que mañana.