Lo sé, estamos todos emocionados con la REST API, y de hecho ya tuvimos la primera versión en WordPress 4.4 pero ¿quien la utiliza actualmente? ¿tienes alguna aplicación en tu web que use la REST API? Entonces ¿por qué tener activa la REST API y todas las cabeceras que incluye en tu web? Buena pregunta ¿verdad?
Ah ¿que no lo sabías? Pues sí, ya está instalada en tu web la REST API, pero ¿la usas? ¡Ah! ¿que no?
Pues si te preocupa el rendimiento de tu sitio ¿para qué tener activo algo que no usas? Vamos a ver que podemos quitar …
Índice de contenidos
Desactiva los enlaces en cabecera de la REST API
Lo primero que podemos eliminar, si no vamos a usarla, son los distintos enlaces de cabecera que añade la WordPress REST API que, si no lo usas con ninguna aplicación o plugin no pintan nada. Es código innecesario y queremos que WordPress vaya lo más rápido posible y ligero ¿no?
Desde WordPress 4.4 se añade la siguiente etiqueta de enlace a todas las páginas en portada:
<link rel='https://api.w.org/' href='http://example.com/path/?rest_route=/' />
Podemos desactivarla añadiendo lo siguiente al archivo functions.php
del tema activo o a tu plugin de personalizaciones:
remove_action('wp_head', 'rest_output_link_wp_head', 10);
Desactiva los enlaces de oEmbed Discovery
WordPress 4.4 también añadió los siguientes enlaces de oEmbed discovery a todas las páginas de entrada única:
<link rel="alternate" type="application/json+oembed" href="http://example.com/path/?rest_route=%2Foembed%2F1.0%2Fembed&url=http%3A%2F%2Fexample.com%2Fpath%2F%3Fp%3D1" /> <link rel="alternate" type="text/xml+oembed" href="http://example.com/path/?rest_route=%2Foembed%2F1.0%2Fembed&url=http%3A%2F%2Fexample.com%2Fpath%2F%3Fp%3D1&format=xml" />
Y lo podemos desactivar con la siguiente función (¿ya no te digo donde no?):
remove_action('wp_head', 'wp_oembed_add_discovery_links', 10);
Desactiva el link de la REST API en las cabeceras HTTP
También se ha añadido en WordPress 4.4 el siguiente enlace de cabecera a todas las peticiones de páginas:
<http://example.com/path/wp-json/>; rel="https://api.w.org/"
Y podemos desactivar esta cabecera añadiendo lo siguiente a nuestro querido archivo functions.php
o a nuestro plugin de funciones:
remove_action('template_redirect', 'rest_output_link_header', 11, 0);
¿Que no necesitas ninguno de estos enlaces? Pues nada, metemos todo esto a capón en nuestro archivo de funciones:
// Desactiva la tag de enlace de la REST API remove_action('wp_head', 'rest_output_link_wp_head', 10); // Desactiva enlaces de oEmbed Discovery remove_action('wp_head', 'wp_oembed_add_discovery_links', 10); // Desactiva enlace de la REST API en las cabeceras HTTP remove_action('template_redirect', 'rest_output_link_header', 11, 0);
Desactiva totalmente la REST API
Si tienes clarísimo que de momento no usas la REST API entonces puedes atacar el asunto de raíz y desactivarla completamente. Tienes un par de opciones:
Desactiva la REST API con una función
Simplemente añade la siguiente función al archivo functions.php del tema activo o a tu plugin de personalizaciones:
add_filter('json_enabled', '__return_false'); add_filter('json_jsonp_enabled', '__return_false');
Desactiva la REST API con un plugin
Pues si, igual que hay un plugin para instalar la REST API al completo tienes uno para desactivarla, se llama Disable JSON API, lo instalas, lo activas y listo.
Referencias imprescindibles:
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Excelente info
Discusión que hemos tenido tu y yo muchas veces. ¿Por qué me habilitas cosas por defecto que no se si necesitaré?
Los servicios deben estar disponibles y habilitarse desde el panel de control o por programación en los widgets que los necesiten. El mundo al revés. Al final nuestros functions.php son REMOVE de cosas que no queremos, y lo peor, sólo disponible para usuarios avanzados.
¿Hay alguna manera de saber qué plugin usa esta API?
Creo que oEmbed Descovery no lo añade WP Rest API sino otro plugin que han incorporado al core llamado oEmbed API y gracias a este, ahora se puede insertar contenido de múltiples plataformas.
solo para agregar, el ultimo código para desactivar por completo la REST API tiene un error por ende no funciona el código correcto vendría siendo este.
add_filter(‘rest_enabled’, ‘_return_false’);
add_filter(‘rest_jsonp_enabled’, ‘_return_false’);
Hola, gracias por tus estupendos artículos, son muy útiles.
Una pregunta sobre este: ¿Cómo puedo saber si alguno de mis plugins usa la REST API? Yo estoy por desactivarla en mi sitio web con el código que indicas (sino totalmente, sí los 3 códigos que das primero, para el ‘functions.php’), pero no sé si eso puede afectar a alguno de mis plugins.
Gracias!
Hola Fernando, gran aporte, pero para los más profanos la pregunta formulada ya hace 4 años de Sergi Balaguer nos parece interesante. Un pasarela de pago como Stripe, PayPal o un plugin como Social login o CF7 se puede ver afectado su funcionamiento con la desactivación total de la API?.
Entiendo que es más una cuestión de una aplicación por ejemplo, pero por si acaso, como decía mi abuelo, más vale 1 segundo colorao que no toda una vida morao.
Se agradece encarecidamente la respuesta.
Saludos desde Murcia!!