{"id":29393,"date":"2021-06-14T16:14:00","date_gmt":"2021-06-14T13:14:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29393"},"modified":"2021-10-17T16:17:54","modified_gmt":"2021-10-17T13:17:54","slug":"como-agregar-puntos-finales-personalizados-a-la-api-de-wordpress","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/como-agregar-puntos-finales-personalizados-a-la-api-de-wordpress\/","title":{"rendered":"C\u00f3mo agregar puntos finales personalizados a la API de WordPress"},"content":{"rendered":"<p>Recientemente trabaj\u00e9 en un proyecto en el que quer\u00edamos usar AngularJS en el front-end y WordPress como backend. Para intercambiar datos entre AngularJS y WordPress, usamos la API REST de WordPress. Fue una buena experiencia trabajar con la API REST en WordPress. WordPress proporciona una forma muy limpia y eficiente de comenzar a usar la API REST. Este popular CMS tambi\u00e9n le permite crear el punto final personalizado para enviar \/ recibir datos a trav\u00e9s de \u00e9l.<\/p>\n<p>En este art\u00edculo, estudiamos c\u00f3mo crear un punto final personalizado en la API REST de WordPress. Voy a crear el punto final personalizado para la solicitud GET y POST.<\/p>\n<h3>Uso de la API REST de WordPress<\/h3>\n<p>Todo el mundo conoce la popularidad de las aplicaciones m\u00f3viles y los marcos de JavaScript. Al crear una aplicaci\u00f3n m\u00f3vil o un sitio web utilizando el marco de JavaScript, debe interactuar con el backend para el intercambio de datos.<\/p>\n<p>Se puede elegir cualquier plataforma como WordPress, Laravel para fines de backend. El \u00fanico requisito es que debe tener puntos finales de API en su plataforma backend para intercambiar datos con el frontend. El sistema frontend da una llamada API al backend. En el backend, debemos construir un sistema que reciba las solicitudes de API y las procese.<\/p>\n<p>En general, usamos dos tipos de solicitudes en los puntos finales de la API: GET y POST. Mientras llamamos a la API con la solicitud GET, la API proporcionar\u00e1 datos de la base de datos en respuesta o eliminar\u00e1 los datos de la base de datos. En el caso de solicitudes POST, insertamos registros en la base de datos o comparamos los datos con la base de datos. Por supuesto, no es una regla general. Los usuarios pueden decidir c\u00f3mo se comporta en funci\u00f3n de sus necesidades.<\/p>\n<h3>Autorizaci\u00f3n mediante la API REST de WordPress<\/h3>\n<p>La API REST de WordPress requiere que siga el flujo de autenticaci\u00f3n b\u00e1sica. En la autenticaci\u00f3n b\u00e1sica, debe enviar un token en el encabezado de Autorizaci\u00f3n mientras env\u00eda una solicitud de API. A partir de WordPress 5.6, se introduce en el sistema una nueva funci\u00f3n, &quot;Contrase\u00f1as de aplicaciones&quot;. Esta contrase\u00f1a de la aplicaci\u00f3n (con nombre de usuario) se puede utilizar como token en el encabezado de Autorizaci\u00f3n.<\/p>\n<p>Las contrase\u00f1as de la aplicaci\u00f3n est\u00e1n disponibles para todos los usuarios en sitios servidos a trav\u00e9s de SSL \/ HTTPS. Si por alguna raz\u00f3n no est\u00e1 utilizando SSL en su sitio web, lo habilita utilizando el filtro a continuaci\u00f3n.<\/p>\n<pre><code>add_filter( 'wp_is_application_passwords_available', '__return_true' );<\/code><\/pre>\n<p>Encontrar\u00e1 la opci\u00f3n de Contrase\u00f1as de la aplicaci\u00f3n en la p\u00e1gina <strong>Usuarios-&gt; Perfil<\/strong>. Genere la contrase\u00f1a simplemente ingresando el Nombre de la aplicaci\u00f3n.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20211-6081cde961b7f.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20211-6081cde961b7f.png\" alt=\"C\u00f3mo agregar puntos finales personalizados a la API de WordPress\" ><\/a><\/p>\n<p>En la captura de pantalla, observa los espacios en la contrase\u00f1a. Las contrase\u00f1as de aplicaciones se pueden utilizar con o sin espacios. Si se incluyen, los espacios simplemente se eliminar\u00e1n antes de que la contrase\u00f1a sea hash y verificada en el extremo de WordPress.<\/p>\n<p>Ahora, est\u00e1 listo con la contrase\u00f1a. A continuaci\u00f3n, para crear un token de autenticaci\u00f3n, debe crear una versi\u00f3n codificada en Base64 de su nombre de usuario y contrase\u00f1a de la aplicaci\u00f3n. Digamos que su nombre de usuario es &#8216;admin&#8217; y la contrase\u00f1a es &#8216;Ho9c 9vGs AOBG nXb0 FPpr W5vO&#8217;. Utilice la siguiente declaraci\u00f3n que le da un token v\u00e1lido final.<\/p>\n<pre><code>&lt;?php\n$username = 'admin';\n$application_password = 'Ho9c 9vGs AOBG nXb0 FPpr W5vO';\n\u00a0\necho base64_encode($username.':'.$application_password);<\/code><\/pre>\n<p>La declaraci\u00f3n anterior devuelve un valor de token como <code>YWRtaW46SG85YyA5dkdzIEFPQkcgblhiMCBGUHByIFc1dk8=<\/code>. Debe enviar este token en el encabezado de Autorizaci\u00f3n mientras llama a la API REST de WordPress.<\/p>\n<h3>Iniciar sesi\u00f3n con la API REST de WordPress<\/h3>\n<p>Estamos listos con el valor del token de autenticaci\u00f3n b\u00e1sica. Ahora, creemos un punto final personalizado para un sistema de inicio de sesi\u00f3n. En el siguiente c\u00f3digo, escribimos un punto final de API que recibe las credenciales del usuario y verifica si los detalles son correctos o no. Necesita agregar este c\u00f3digo en su <code>functions.php<\/code>archivo de temas .<\/p>\n<pre><code>add_action(\n\u00a0\u00a0\u00a0\u00a0'rest_api_init',\n\u00a0\u00a0\u00a0\u00a0function() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0register_rest_route(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'api',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'login',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'methods'\u00a0 =&gt; 'POST',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'callback' =&gt; 'login',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0}\n);<\/code><\/pre>\n<p>WordPress proporciona una acci\u00f3n &#8216;rest_api_init&#8217; con la que podemos construir nuestros puntos finales personalizados. Aqu\u00ed estoy usando la funci\u00f3n <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_rest_route\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">register_rest_route<\/a> que produce el punto final API anterior como YOUR_SITE_URL \/ wp-json \/ api \/ login.<\/p>\n<p>En nuestro c\u00f3digo, &#8216;api&#8217; es el espacio de nombres, &#8216;login&#8217; es la ruta, un m\u00e9todo es &#8216;POST&#8217; y la funci\u00f3n de devoluci\u00f3n de llamada es &#8216;login&#8217;. El m\u00e9todo de devoluci\u00f3n de llamada tendr\u00e1 una l\u00f3gica real.<\/p>\n<p>Para escribir una l\u00f3gica para el flujo de inicio de sesi\u00f3n, los par\u00e1metros POST requeridos son el correo electr\u00f3nico y la contrase\u00f1a, que deben enviarse desde la interfaz junto con el encabezado de autorizaci\u00f3n. Mientras publica estos datos, debe enviarlos en formato JSON. Por ejemplo, desde VSCode usando <a href=\"https:\/\/themewp.inform.click\/es\/extension-de-cliente-rest-para-visual-studio-code\/\" title=\"Rest Client Extension\">Rest Client Extension<\/a>, env\u00edo la solicitud POST como se muestra en la captura de pantalla a continuaci\u00f3n.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20211-6081cde961b7f.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20211-6081cde961b7f.png\" alt=\"C\u00f3mo agregar puntos finales personalizados a la API de WordPress\" ><\/a><\/p>\n<p>Aqu\u00ed hemos pasado el token creado en el paso anterior como el valor del encabezado de autorizaci\u00f3n.<\/p>\n<p>Agregue el siguiente c\u00f3digo para el <code>login()<\/code>m\u00e9todo en el <code>functions.php<\/code>archivo.<\/p>\n<pre><code>function login( WP_REST_Request $request) {\n\u00a0\u00a0\u00a0\u00a0$arr_request = json_decode( $request-&gt;get_body() );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if (! empty( $arr_request-&gt;email) &amp;&amp;! empty( $arr_request-&gt;password)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ this returns the user ID and other info from the user name.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = get_user_by( 'email', $arr_request-&gt;email );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (! $user) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ if the user name doesn't exist.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'error',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'message' =&gt; 'Wrong email address.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ check the user's login with their password.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (! wp_check_password( $arr_request-&gt;password, $user-&gt;user_pass, $user-&gt;ID)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ if the password is incorrect for the specified user.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'error',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'message' =&gt; 'Wrong password.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'success',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'message' =&gt; 'User credentials are correct.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0];\n\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'error',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'message' =&gt; 'Email and password are required.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0];\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p><strong>Nota:<\/strong> Si recibiste un error como &quot;No se encontr\u00f3 ninguna ruta que coincida con la URL y el m\u00e9todo de solicitud&quot;, debes actualizar tu enlace permanente.<\/p>\n<p>Al recibir el valor de &#8216;\u00e9xito&#8217; para la clave de &#8216;estado&#8217;, puede registrar al usuario en la aplicaci\u00f3n de interfaz.<\/p>\n<h3>Cree un punto final para la solicitud GET<\/h3>\n<p>Hemos visto c\u00f3mo crear puntos finales personalizados para solicitudes POST. Ahora, echemos un vistazo a la solicitud GET utilizando la API REST de WordPress. Para ello, escribir\u00e9 una API que borre un usuario. Desde la interfaz, debe pasar la identificaci\u00f3n de un usuario como par\u00e1metro GET.<\/p>\n<pre><code>add_action(\n\u00a0\u00a0\u00a0\u00a0'rest_api_init',\n\u00a0\u00a0\u00a0\u00a0function() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0register_rest_route(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'api',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'delete_user\/(?P&lt;id&gt;d+)',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'methods'\u00a0 =&gt; 'GET',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'callback' =&gt; 'delete_user',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0}\n);<\/code><\/pre>\n<p>Este c\u00f3digo genera un punto final de API como YOUR_SITE_URL \/ wp-json \/ api \/ delete_user \/ id. Para este punto final, en lugar de id, debe pasar el id real de un usuario.<\/p>\n<p>El m\u00e9todo de devoluci\u00f3n de llamada <code>delete_user<\/code>tendr\u00e1 el siguiente c\u00f3digo.<\/p>\n<pre><code>function delete_user( $data) {\n\u00a0\u00a0\u00a0\u00a0\/\/ delete the user\n\u00a0\u00a0\u00a0\u00a0require_once(ABSPATH.'wp-admin\/includes\/user.php' );\n\u00a0\u00a0\u00a0\u00a0if (wp_delete_user($data['id'])) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'success',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'message' =&gt; 'User deleted successfully.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0];\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0return [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status' =&gt; 'error',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'message' =&gt; 'It seems you passed the wrong user id.',\n\u00a0\u00a0\u00a0\u00a0];\n}<\/code><\/pre>\n<p>Espero que comprenda c\u00f3mo crear un punto final personalizado en la API REST de WordPress. Comparta sus pensamientos y sugerencias en la secci\u00f3n de comentarios a continuaci\u00f3n.<\/p>\n<h4>Art\u00edculos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/una-guia-rapida-sobre-la-api-rest-de-woocommerce\/\" title=\"Una gu\u00eda r\u00e1pida sobre la API REST de WooCommerce\">Una gu\u00eda r\u00e1pida sobre la API REST de WooCommerce<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-mostrar-productos-relacionados-con-la-api-rest-de-woocommerce\/\" title=\"C\u00f3mo mostrar productos relacionados con la API REST de WooCommerce\">C\u00f3mo mostrar productos relacionados con la API REST de WooCommerce<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/conversion-de-voz-a-texto-con-amazon-transcribe-en-php\/\" title=\"Conversi\u00f3n de voz a texto con Amazon Transcribe en PHP\">Conversi\u00f3n de voz a texto con Amazon Transcribe en PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQuiere crear un punto final personalizado en la API REST de WordPress? Al crear una aplicaci\u00f3n m\u00f3vil o un sitio web con un marco de JavaScript<\/p>\n","protected":false},"author":1,"featured_media":21623,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[606],"tags":[849],"class_list":["post-29393","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=29393"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29393\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/21623"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=29393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=29393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=29393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}