¿Por qué debería usar funciones HTTP WordPress para hacer solicitudes de API?


A veces, su sitio web de WordPress necesita discutir con otros servicios web. Esto sucede casi exclusivamente utilizando el protocolo HTTP. Un ejemplo común a este respecto es cuando su instalación de WordPress contacta a los servidores WordPress.org para verificar si hay nuevas versiones de complementos, temas y el núcleo de WordPress. También es algo muy común en un complemento o un tema de WordPress. Cualquier complemento que interactúe con un servicio externo está obligado a realizar algunas solicitudes HTTP y Colo. Cosas como agregar suscriptores a su lista de MailChimp, enviar correos electrónicos a través de Amazon SES o descargar imágenes en Amazon S3 implica muchas solicitudes HTTP.
En esta publicación, analizaremos las funciones HTTP incorporadas que WordPress ofrece para hacer estas solicitudes y por qué casi siempre es una buena idea usar esas funciones. Pero primero, algo de fondo. Haga mal: usar las funciones PHP PHP en sí misma ofrece algunas formas diferentes de realizar solicitudes HTTP. Puede trabajar directamente con las funciones de red para sus solicitudes HTTP utilizando fsockopen (), fread () y fwrite (), pero podrá perder el tiempo y reinventar muchas ruedas sin ninguna buena razón. Un poco mejor usar una de las funciones de lectura de archivos que pueden administrar el paquete PHP HTTP Protocol. Esto incluye las funciones ligeramente engorrosas () fopen (), así como muchas funciones más ligeras () y file_get_contins (). Una línea simple realmente te llevará lejos:
// solo código de ejemplo, ¡no hagas esto! $ respuesta = file_get_contins (‘https://www.google.com/’); Pero antes de ingresar este código en su complemento de WordPress o tema infantil, tenga en cuenta que muchos proveedores de alojamiento desactivan explícitamente las URL de esta manera. Entonces, lo que funciona en su entorno de desarrollo local puede no funcionar en su entorno de producción. Y, además, el hecho de que sea posible obtener contenido de una URL de Internet utilizando funciones PHP no significa que este sea el mejor enfoque en el desarrollo cotidiano. Simplemente agregar el requisito aparentemente inocente para especificar un encabezado en la solicitud HTTP hace que el ejemplo anterior sea más complicado (ejemplo de Stack Overflow): // solo código, ¡no hagas esto! // creó un stream $ ops = array (“http” => array (“método” => “get”, “encabezado” => “Aceptación de aceptación: EN: EN
“,); // Docs: https://www.php.net/manual/en/function.stream-context-create.php $ context = stream_text_create ($ ops); // Abrir el archivo usando el conjunto de cabezales http Arriba // documentos: https://www.php.net/manual/en/function.file-get-contents.php $ file = file_get_contents (‘https://www.google.com/’, falso, $ context); ya no es tan fácil. Y luego considere que este ejemplo no tiene gestión de errores. Por lo tanto, si no está 100% seguro de que el servidor remoto responderá cortésmente (sugerir: no lo está), debe agregar más código Para concluir que simple file_get_contents () evad () antes de ser utilizable en el código de producción.
La abundancia de bibliotecas PHP HTTP porque hacer solicitudes HTTP con PHP bruto está un poco restante, no debería sorprender que haya docenas de bibliotecas de ayuda que faciliten la creación de solicitudes HTTP. En el mundo de PHP más amplio, el que está fuera de WordPress, basado en compositor para la gestión de adicciones, Guzzle y HTTPFLE se encuentran entre las bibliotecas más populares para administrar las solicitudes HTTP, pero hay literalmente docenas de otros que elegir. Todo con sus propias fortalezas y debilidades. En el mundo de WordPress, debemos ser un poco cuidadosos antes de usar bibliotecas de compositor, especialmente si envía este código a otros usuarios de WordPress. Hay dos razones principales para esto. En primer lugar, hay un riesgo real de que usted o sus usuarios lleguen a una versión del Infierno de Addiction Composer. En resumen, otro complemento en la misma instalación de WordPress utiliza la misma adicción que su complemento, pero ese complemento utiliza una versión diferente de esa adicción. WordPress tiene una forma determinista de cargar complementos. Aunque técnicamente es posible poner el orden de los complementos, está muy desanimado. Además, independientemente de los trucos que juegues para obligar al complemento a cargar primero, otros desarrolladores pueden jugar. Por estas razones, nunca sabrá si su complemento usará las versiones de la adicción que ha entregado u otra versión, tal vez incompatible.
Hay formas de resolver esto utilizando el complemento impostor que puede incluir todas las adicciones al compositor en su propio espacio de nombre PHP. Puede ir de esta manera, pero la idea aparentemente simple de usar un paquete compositor para administrar las solicitudes HTTP se ha convertido repentinamente en un problema mucho mayor, lo que probablemente cambia su proceso de construcción. En nuestro propio producto WP Descarga Media, utilizamos bibliotecas de tercera parte de proveedores de almacenamiento aceptados (Amazon AWS, océano digital, etc.) que a su vez usan la biblioteca Guzzle HTTP. Para evitar problemas de compatibilidad con otros complementos, utilizamos Imposter para incluir todas estas adicciones en un espacio de nombres separado. La otra es la razón por la cual deberíamos pensarlo dos veces antes de usar una biblioteca de terceros para las solicitudes HTTP es que el proceso de filtración de WordPress se acortará. Una de las excelentes cualidades de WordPress es que tantas cosas pueden personalizarse a través de acciones y filtros, y hacer solicitudes HTTP no es la excepción. Entraremos en más detalles en la siguiente sección de esta publicación, pero dar a los propietarios del sitio la oportunidad de cambiar las solicitudes de HTTP para satisfacer sus necesidades especiales es inherentemente bueno. No debe eliminar esta función a menos que tenga una muy buena razón.
Greet WP_remote_Get, WP_remote_Post and friends over the past 12 years, WordPress has been delivered with their own incorporated functions to treat http requests, namely WP_remote_GET (), WP_remote_post () and WP_remote_Head (), a function for each of the verbs htp get, post y cabeza.. Estas tres funciones globales funcionan como envoltorios alrededor de la clase WP_HTTP que, a su vez, usa la biblioteca de solicitudes. De hecho, hemos escrito un poco sobre la biblioteca de solicitudes en nuestra publicación sobre cómo WordPress usa Curl para realizar solicitudes HTTP. El uso de wp_remote_get () puede ser tan simple como: $ respuesta = wp_remote_get (‘https://www.google.com/’); Hay muchas razones por las que debe preferir usar las funciones en la familia wp_remote_*, aquí están las más importantes. Siempre están ahí wp_remote_* Las funciones han aparecido en WordPress cerca del principio, por lo que no es absolutamente necesario preocuparse de que no estén presentes. Varias funciones importantes en el núcleo de WordPress, como las instalaciones de complementos y las actualizaciones automáticas, se basan en estas funciones para estar allí y trabajar, lo que hacen. Por lo tanto, no hay una razón real para agregar bibliotecas de tercera parte para solicitudes HTTP, ya tiene acceso a una biblioteca buena y confiable.
Son muy capaces, puede acceder a casi todas las características del protocolo HTTP mediante la introducción de argumentos adicionales a través del segundo parámetro de estas funciones. Puede agregar la sede, cambiar al usuario del usuario, forzar una determinada versión del protocolo HTTP, etc. También puede especificar su propia ubicación para los certificados SSL, deshabilitar el certificado SSL, cambiar el tiempo de anticipación de tiempo de espera o incluso agregar verbos HTTP. De hecho, analizaremos la adición de paquetes para dos verbos HTTP a continuación en esta publicación de blog. Aquí hay un ejemplo en el que cambio un poco la solicitud del HTTP antes de enviarlo al servidor remoto: $ args = array (// aumenta el tiempo de espera del valor predeterminado de 5 a 10 segundos ‘=> 10, // sobrescribe el Valor predeterminado: “WordPress/5.8; www.mysite.tld” encabezado: ‘user-agent’ => ‘mi instalación especial de WordPress’, // Agregue un par de encabezados personalizados ‘encabezados’ => array (x-cuba –id ‘ => ‘ABC123’, ‘X-Secret-thing’ => ‘Secret’,), // omitir validando los servidores http ssl; ‘sslverify’ => false,); $ respuesta = wp_remote_get (‘https://www.example.com/’, $ args);
La lista completa de argumentos válidos no está completamente documentada en ninguna parte, pero se puede encontrar en el archivo de origen para la clase HTTP en sí o en este breve comentario, wp_remote_get (), wp_remote_post () y wp_remote_head () pueden administrar la mayoría de los casos de los casos de los casos de use. Para las solicitudes HTTP que puedo pensar. Entonces, en realidad, hay muy pocas situaciones en las que tienes que usar una tercera parte en WordPress. Usando la biblioteca de aplicaciones básicas, incluso es posible utilizar las funciones construidas para realizar más solicitudes al mismo tiempo, pero esto es poco fuera del propósito de esta publicación de blog. Son fáciles de personalizar al ejecutar una solicitud HTTP, todas las funciones WP_REMOTE_* llamarán muchos filtros diferentes de WordPress que le permiten cambiar el comportamiento exacto o incluso bloquear las URL externos para que nunca se requiera. Esto significa que no solo puede controlar sus propias solicitudes HTTP en detalle, sino que también puede interferir con las solicitudes HTTP hechas por otros complementos o incluso WordPress. Imagine que usted es responsable de algunas instalaciones internas de WordPress en una gran empresa. Para cumplir con las reglas internas de seguridad de TI, debe ocultar la URL interna del sitio que se agrega automáticamente a la cadena del agente de usuario en las solicitudes HTTP. ¿Cómo lo harías tú? Bueno, wp_remote_get () y todos sus amigos activarán el filtro http_request_args antes de que se envíe la solicitud, por lo que podemos cambiar esto usando un filtro simple de WordPress: función my_http_request_args ($ args) {$ args [”
user-agent ‘] =’ WordPress ‘;devolver $ args;} add_filter (‘http_request_args’, ‘my_http_request_args’);Es posible que algunos propietarios del sitio necesiten bloquear completamente el tráfico HTTP a URL externa.Todas las solicitudes que se realizan usando wp_remote_get (), wp_remote_post () o wp_remote_ead () cumplirán con las constantes wp_htp_block_external y wp_access_hosts.Escribí un poco sobre ellos en nuestra documentación para WP Migra DB Pro.Si se define, estas dos constantes permitirán que el propietario de un sitio detenga todo el tráfico de salida, pero, opcionalmente, también permitirán un conjunto de excepciones: Define (‘wp_htp_block_external’, true);Define (‘wp_accessible_hosts’, ‘api.example.com, www.example.com’);Una solicitud a cualquier otro host ahora devolverá un wp_error: $ respuesta = wp_remote_get (‘https://www.google.com’);/* Return: wp_error object ([errores] => array ([http_request_not_execud] => array ([0] =>

El usuario ha bloqueado las solicitudes a través de HTTP. ))…)*/ Usando las funciones HTTP Built -In En su código, sus usuarios obtienen todo este bajo control de las solicitudes HTTP sin tener que escribir una sola línea de código adicional. ¡Qué genial es! Un buen transporte de las solicitudes de las solicitudes que la diferencian de algunos de los anteriores es que es agnóstico del transporte es agnóstico. Específicamente, en el caso de las solicitudes HTTP, no depende de la instalación del módulo CURL en el servidor web. La biblioteca de solicitud prefiere usar curl si está instalado. Pero en el caso poco probable en el que el curl no esté presente, la biblioteca de solicitudes puede volver al uso de fsockant (). De todos modos, la biblioteca de solicitudes liderará el trabajo, por lo que tendrá menos adicción a la prueba, documentada o para quien se preocupe. ¿Pero wp_remote_put y wp_remote_delete? Si ha trabajado un poco con API remotas y sabe cómo usar verbos HTTP, es posible que haya notado que no he mencionado wp_remote_put () o wp_remote_delete (). Debido a que tenemos implementaciones integradas para Get, Post y Head, debería haber una implementación para PUT y Delete. ¿Derecha? Bueno no. El equipo central de WordPress aún no ha implementado todos los verbos HTTP estándar. Pero hay una discusión en curso sobre cómo agregarlos en la herramienta de seguimiento de WordPress, por lo que podría suceder en una versión futura. Si necesita estas características anteriormente, la naturaleza modular de la clase WP_HTTP, combinada con la función WP_REMOTE_REQUEST WRAPPER, hace que sea muy fácil agregar estos dos a su propio código: if (!

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

gkOVSBm5B8SgiXmo

Shopify vs WooCommerce – ¿Cuál es la mejor plataforma?(Comparación)

Shopify vs WooCommerce

Leave a Reply

Your email address will not be published. Required fields are marked *