{"id":28609,"date":"2021-06-14T16:58:00","date_gmt":"2021-06-14T13:58:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28609"},"modified":"2021-10-18T03:59:49","modified_gmt":"2021-10-18T00:59:49","slug":"como-adicionar-endpoints-personalizados-a-api-wordpress","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/como-adicionar-endpoints-personalizados-a-api-wordpress\/","title":{"rendered":"Como adicionar endpoints personalizados \u00e0 API WordPress"},"content":{"rendered":"<p>Recentemente, trabalhei em um projeto em que quer\u00edamos usar AngularJS no front-end e WordPress como back-end. Para trocar dados entre AngularJS e WordPress, usamos a API REST do WordPress. Foi uma boa experi\u00eancia trabalhar com a API REST no WordPress. O WordPress fornece uma maneira muito limpa e eficiente de come\u00e7ar a usar a API REST. Este CMS popular tamb\u00e9m permite que voc\u00ea crie o endpoint personalizado para enviar \/ receber dados por meio dele.<\/p>\n<p>Neste artigo, estudamos como criar um endpoint personalizado na API REST do WordPress. Vou construir o ponto de extremidade personalizado para a solicita\u00e7\u00e3o GET e POST.<\/p>\n<h3>Uso da API REST do WordPress<\/h3>\n<p>Todo mundo sabe sobre a popularidade dos aplicativos m\u00f3veis e estruturas JavaScript. Ao construir um aplicativo m\u00f3vel ou site usando a estrutura JavaScript, voc\u00ea precisa interagir com o back-end para a troca de dados.<\/p>\n<p>Pode-se escolher qualquer plataforma como WordPress, Laravel para fins de back-end. O \u00fanico requisito \u00e9 que voc\u00ea deve ter pontos de extremidade de API em sua plataforma de back-end para trocar dados com o front-end. O sistema de front-end fornece uma chamada de API para o back-end. No back-end, devemos construir um sistema que receba as solicita\u00e7\u00f5es da API e as processe.<\/p>\n<p>Geralmente, usamos dois tipos de solicita\u00e7\u00f5es em endpoints de API &#8211; GET e POST. Embora chamemos API com solicita\u00e7\u00e3o GET, API fornecer\u00e1 dados do banco de dados em resposta ou excluir\u00e1 os dados no banco de dados. No caso de solicita\u00e7\u00f5es POST, inserimos registros no banco de dados ou verificamos os dados no banco de dados. Claro, n\u00e3o \u00e9 uma regra de ouro. Os usu\u00e1rios podem decidir como ele se comporta de acordo com seus requisitos.<\/p>\n<h3>Autoriza\u00e7\u00e3o usando a API REST do WordPress<\/h3>\n<p>A API REST do WordPress requer que voc\u00ea siga o fluxo de autentica\u00e7\u00e3o b\u00e1sica. No Basic Auth, voc\u00ea deve enviar um token no cabe\u00e7alho Authorization ao enviar uma solicita\u00e7\u00e3o de API. Iniciando o WordPress 5.6, um novo recurso &#8216;Senhas de aplicativos&#8217; foi introduzido no sistema. Esta senha do aplicativo (com nome de usu\u00e1rio) pode ser usada como um token no cabe\u00e7alho de autoriza\u00e7\u00e3o.<\/p>\n<p>As senhas do aplicativo est\u00e3o dispon\u00edveis para todos os usu\u00e1rios em sites servidos por SSL \/ HTTPS. Se por algum motivo voc\u00ea n\u00e3o estiver usando SSL em seu site, voc\u00ea o disponibiliza usando o filtro abaixo.<\/p>\n<pre><code>add_filter( 'wp_is_application_passwords_available', '__return_true' );<\/code><\/pre>\n<p>Voc\u00ea encontrar\u00e1 a op\u00e7\u00e3o de senhas de aplicativos na p\u00e1gina <strong>Usu\u00e1rios-&gt; Perfil<\/strong>. Gere a senha simplesmente inserindo o nome do aplicativo.<\/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=\"Como adicionar endpoints personalizados \u00e0 API WordPress\" ><\/a><\/p>\n<p>Na captura de tela, voc\u00ea percebe os espa\u00e7os na senha. As senhas do aplicativo podem ser usadas com ou sem espa\u00e7os. Se inclu\u00eddos, os espa\u00e7os ser\u00e3o eliminados antes que a senha seja criptografada e verificada no final do WordPress.<\/p>\n<p>Agora, voc\u00ea est\u00e1 pronto com a senha. Em seguida, para criar um token de autentica\u00e7\u00e3o, voc\u00ea deve criar uma vers\u00e3o codificada em Base64 do seu nome de usu\u00e1rio e senha do aplicativo. Digamos que seu nome de usu\u00e1rio seja &#8216;admin&#8217; e a senha seja &#8216;Ho9c 9vGs AOBG nXb0 FPpr W5vO&#8217;. Use a seguinte instru\u00e7\u00e3o que fornece um 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>A instru\u00e7\u00e3o acima retorna um valor de token como <code>YWRtaW46SG85YyA5dkdzIEFPQkcgblhiMCBGUHByIFc1dk8=<\/code>. Esse token voc\u00ea precisa enviar no cabe\u00e7alho de autoriza\u00e7\u00e3o ao chamar a API REST do WordPress.<\/p>\n<h3>Login usando a API REST do WordPress<\/h3>\n<p>Estamos prontos com o valor do token de autentica\u00e7\u00e3o b\u00e1sica. Agora, vamos construir um endpoint personalizado para um sistema de login. No c\u00f3digo a seguir, escrevemos um endpoint de API que recebe as credenciais do usu\u00e1rio e verifica se os detalhes est\u00e3o corretos ou n\u00e3o. Voc\u00ea precisa adicionar este c\u00f3digo em seu <code>functions.php<\/code>arquivo 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>O WordPress fornece uma a\u00e7\u00e3o &#8216;rest_api_init&#8217; usando a qual podemos construir nossos endpoints personalizados. Aqui estou usando a fun\u00e7\u00e3o <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 produz o endpoint da API acima como YOUR_SITE_URL \/ wp-json \/ api \/ login.<\/p>\n<p>Em nosso c\u00f3digo, &#8216;api&#8217; \u00e9 o namespace, &#8216;login&#8217; \u00e9 a rota, um m\u00e9todo \u00e9 &#8216;POST&#8217; e a fun\u00e7\u00e3o de retorno de chamada \u00e9 &#8216;login&#8217;. O m\u00e9todo de retorno de chamada ter\u00e1 uma l\u00f3gica real.<\/p>\n<p>Para escrever uma l\u00f3gica para o fluxo de login, os par\u00e2metros POST necess\u00e1rios s\u00e3o e-mail e senha que devem ser enviados do frontend junto com o cabe\u00e7alho de autoriza\u00e7\u00e3o. Ao postar esses dados, voc\u00ea precisa envi\u00e1-los no formato JSON. Por exemplo, a partir do VSCode usando <a href=\"https:\/\/themewp.inform.click\/pt-pt\/extensao-cliente-rest-para-visual-studio-code\/\" title=\"Rest Client Extension\">Rest Client Extension<\/a>, envio a solicita\u00e7\u00e3o POST conforme mostrado na captura de tela abaixo.<\/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=\"Como adicionar endpoints personalizados \u00e0 API WordPress\" ><\/a><\/p>\n<p>Aqui, passamos o token criado na etapa anterior como o valor do cabe\u00e7alho de autoriza\u00e7\u00e3o.<\/p>\n<p>Adicione o c\u00f3digo abaixo para o <code>login()<\/code>m\u00e9todo no <code>functions.php<\/code>arquivo.<\/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>Observa\u00e7\u00e3o:<\/strong> se voc\u00ea recebeu um erro como &#8220;Nenhuma rota encontrada que corresponda ao URL e ao m\u00e9todo de solicita\u00e7\u00e3o&quot;, ser\u00e1 necess\u00e1rio atualizar seu link permanente.<\/p>\n<p>Ao receber o valor de &#8216;sucesso&#8217; para a chave de &#8216;status&#8217;, voc\u00ea pode registrar o usu\u00e1rio no aplicativo de front-end.<\/p>\n<h3>Construir um Endpoint para Solicita\u00e7\u00e3o GET<\/h3>\n<p>Vimos como construir endpoints personalizados para solicita\u00e7\u00f5es POST. Agora, vamos examinar a solicita\u00e7\u00e3o GET usando a API REST do WordPress. Para isso, vou escrever uma API que exclui um usu\u00e1rio. Do frontend, voc\u00ea deve passar o id de um usu\u00e1rio como um par\u00e2metro 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 gera um endpoint de API como YOUR_SITE_URL \/ wp-json \/ api \/ delete_user \/ id. Para este endpoint, em vez de id, voc\u00ea deve passar a id real de um usu\u00e1rio.<\/p>\n<p>O m\u00e9todo de retorno de chamada <code>delete_user<\/code>ter\u00e1 o seguinte 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 voc\u00ea entenda como construir um endpoint personalizado na API REST do WordPress. Por favor, compartilhe seus pensamentos e sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/um-guia-rapido-sobre-woocommerce-rest-api\/\" title=\"Um guia r\u00e1pido sobre WooCommerce REST API\">Um guia r\u00e1pido sobre WooCommerce REST API<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-exibir-produtos-relacionados-usando-woocommerce-rest-api\/\" title=\"Como exibir produtos relacionados usando WooCommerce REST API\">Como exibir produtos relacionados usando WooCommerce REST API<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/speech-to-text-usando-amazon-transcribe-em-php\/\" title=\"Speech-To-Text usando Amazon Transcribe em PHP\">Speech-To-Text usando Amazon Transcribe em PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea deseja criar um endpoint personalizado na API REST do WordPress? Durante a constru\u00e7\u00e3o de um aplicativo m\u00f3vel ou site usando um framewrok 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":[613],"tags":[848],"class_list":["post-28609","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-9","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28609","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=28609"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28609\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21623"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28609"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28609"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28609"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}