{"id":40978,"date":"2020-12-15T01:13:20","date_gmt":"2020-12-15T09:13:20","guid":{"rendered":"https:\/\/kinsta.com\/?p=4181"},"modified":"2023-08-21T10:10:19","modified_gmt":"2023-08-21T13:10:19","slug":"wordpress-http-api","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/","title":{"rendered":"Usando o WordPress HTTP API"},"content":{"rendered":"<p>O WordPress <a href=\"https:\/\/codex.wordpress.org\/HTTP_API\">HTTP API<\/a> consiste em um conjunto de fun\u00e7\u00f5es que o ajudar\u00e3o a fazer chamadas HTTP com muito mais facilidade. N\u00e3o h\u00e1 mais necessidade de brincar com file_get_contents ou cURL, apenas uma \u00fanica interface unificada. Isto \u00e9 fant\u00e1stico para interagir com APIs de terceiros, especialmente APIs com REST, como Twitter, Facebook, MailChimp, e outras.<\/p>\n<ul>\n<li><a href=\"#basics-of-http\">O b\u00e1sico do HTTP<\/a><\/li>\n<li><a href=\"#restful-apis\">Sobre as APIs Restful<\/a><\/li>\n<li><a href=\"#wordpress-http-api\">Usando o WordPress HTTP API<\/a><\/li>\n<\/ul>\n<h2 id=\"basics-of-http\">O b\u00e1sico do HTTP<\/h2>\n<p>Todos n\u00f3s j\u00e1 vimos o HTTP em a\u00e7\u00e3o antes. Na verdade, se esta \u00e9 sua primeira vez na web e esta \u00e9 a primeira coisa que voc\u00ea est\u00e1 lendo, voc\u00ea j\u00e1 viu o HTTP trabalhando sua magia. HTTP \u00e9 um protocolo de rede usado para entregar todos os arquivos e dados (recursos) atrav\u00e9s da Interwebs.<\/p>\n<p>H\u00e1 basicamente duas partes na equa\u00e7\u00e3o: a <strong>solicita\u00e7\u00e3o HTTP <\/strong>e a <strong>resposta HTTP<\/strong>, ou transa\u00e7\u00e3o. Tanto a solicita\u00e7\u00e3o quanto a resposta s\u00e3o muito semelhantes em estrutura, ambas t\u00eam quatro partes:<\/p>\n<ul>\n<li>Uma linha inicial<\/li>\n<li>Zero ou mais linhas de cabe\u00e7alho<\/li>\n<li>Uma linha em branco<\/li>\n<li>Um conte\u00fado corporal opcional<\/li>\n<\/ul>\n<h3>A linha inicial<\/h3>\n<p>As solicita\u00e7\u00f5es utilizam a linha inicial para enviar tr\u00eas informa\u00e7\u00f5es: o nome do m\u00e9todo, o caminho e a vers\u00e3o HTTP. Por exemplo, ao visualizar a p\u00e1gina principal do blog Kinsta, voc\u00ea ver\u00e1 isto na linha inicial da solicita\u00e7\u00e3o.<\/p>\n<pre><code class=\"language-bash\">GET \/blog\/ HTTP\/1.1<\/code><\/pre>\n<p>As respostas fornecem tamb\u00e9m tr\u00eas informa\u00e7\u00f5es, embora um pouco diferentes: A vers\u00e3o HTTP, o c\u00f3digo de resposta e uma descri\u00e7\u00e3o da resposta. Ao fazer uma solicita\u00e7\u00e3o ao blog principal Kinsta, ele enviar\u00e1 uma resposta HTTP com a seguinte linha inicial:<\/p>\n<pre><code class=\"language-bash\">HTTP\/1.0 200 OK<\/code><\/pre>\n<h3>Cabe\u00e7alhos<\/h3>\n<p>Os cabe\u00e7alhos cont\u00eam v\u00e1rios peda\u00e7os de informa\u00e7\u00e3o sobre a solicita\u00e7\u00e3o ou a resposta. HTTP 1.1 define 46 tipos de cabe\u00e7alhos, mas apenas um \u00e9 necess\u00e1rio (apenas para solicita\u00e7\u00f5es), o cabe\u00e7alho &#8220;Host&#8221;. Veja a captura de tela de minhas ferramentas de desenvolvimento Chrome que mostra alguns dos cabe\u00e7alhos enviados junto com uma solicita\u00e7\u00e3o para o blog principal do Kinsta:<\/p>\n<p><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2015\/07\/Screen-Shot-2015-07-22-at-13.48.11.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full \" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2015\/07\/Screen-Shot-2015-07-22-at-13.48.11.png\" alt=\"HTTP request headers sent\" width=\"572\" height=\"167\"><\/a><\/p>\n<h3>Corpo<\/h3>\n<p>O corpo geralmente cont\u00e9m dados sobre o recurso solicitado. Se voc\u00ea enviar uma solicita\u00e7\u00e3o de GET para o blog principal do Kinsta voc\u00ea deve receber o HTML necess\u00e1rio para renderizar a p\u00e1gina (o recurso) no conte\u00fado do corpo.<\/p>\n<h3>Mais informa\u00e7\u00f5es<\/h3>\n<p>Isso \u00e9 tudo que voc\u00ea precisa saber agora mesmo sobre HTTP. Vamos nos concentrar principalmente no nome do m\u00e9todo (GET,POST,etc), cabe\u00e7alhos e o corpo. Se voc\u00ea gostaria de saber mais, recomendo a <a href=\"http:\/\/www.jmarshall.com\/easy\/http\/\">explica\u00e7\u00e3o de James Marshall sobre HTTP<\/a>, \u00e9 uma cartilha muito bem escrita para suas necessidades HTTP.<\/p>\n<h2 id=\"restful-apis\">Sobre as APIs Restful<\/h2>\n<p>APIs Restful, ou a metodologia REST tem como objetivo fornecer uma maneira simples e padr\u00e3o de interagir com uma aplica\u00e7\u00e3o (aqui voc\u00ea pode aprender mais sobre os <a href=\"https:\/\/kinsta.com\/pt\/blog\/wordpress-rest-api\/\">conceitos b\u00e1sicos do WordPress REST API<\/a>). Ela \u00e9 freq\u00fcentemente usada em conjunto com HTTP para criar um sistema muito compreens\u00edvel de intera\u00e7\u00f5es. Ele \u00e9 baseado em <strong>caminhos <\/strong>e <strong>verbos HTTP<\/strong>.<\/p>\n<p>Os Verbos HTTP s\u00e3o os mesmos nomes dos m\u00e9todos que vimos anteriormente, os mais comuns s\u00e3o: GET, POST, PUT, DELETE. Eu acho que PUT \u00e9 o \u00fanico amb\u00edguo aqui, pense nisso como um comando de atualiza\u00e7\u00e3o. Ao usar estes verbos junto com os caminhos, podemos construir um sistema significativo:<\/p>\n<p><code>GET \/post\/1\/<\/code> seria usado para recuperar o posto com o ID de 1. <code>DELETE \/post\/1\/<\/code> seria usado para apagar o mesmo posto. Poder\u00edamos tamb\u00e9m usar <code>PUT \/post\/1\/<\/code> para atualiz\u00e1-lo, fornecendo informa\u00e7\u00f5es relevantes no corpo do pedido e cabe\u00e7alhos.<\/p>\n<p>Tenho certeza de que voc\u00ea pode ver que apenas anexando uma vers\u00e3o HTTP aos nossos c\u00f3digos acima temos a linha inicial de uma transa\u00e7\u00e3o HTTP, o que \u00e9 apenas uma das raz\u00f5es pelas quais este sistema \u00e9 t\u00e3o poderoso.<\/p>\n<h2 id=\"wordpress-http-api\">Usando o WordPress HTTP API<\/h2>\n<p>Munidos de todo esse conhecimento, podemos facilmente compreender como funciona o WordPress HTTP API. Os quatro m\u00e9todos usados para fazer solicita\u00e7\u00f5es e interceptar as respostas s\u00e3o:<\/p>\n<ul>\n<li><code>wp_remote_get()<\/code><\/li>\n<li><code>wp_remote_post()<\/code><\/li>\n<li><code>wp_remote_head()<\/code><\/li>\n<li><code>wp_remote_request()<\/code><\/li>\n<\/ul>\n<p>As duas primeiras fun\u00e7\u00f5es s\u00e3o auto-explicativas, elas utilizam os m\u00e9todos GET e POST respectivamente no pedido. A terceira fun\u00e7\u00e3o usa o m\u00e9todo HEAD, algo sobre o qual ainda n\u00e3o falamos. Este m\u00e9todo \u00e9 usado para recuperar apenas os cabe\u00e7alhos de uma resposta. Isto pode economizar <strong>muito <\/strong>overhead se precisarmos apenas de alguns metadados sobre um recurso. A fun\u00e7\u00e3o final \u00e9 gen\u00e9rica, voc\u00ea pode especificar qual m\u00e9todo voc\u00ea gostaria de usar dentro dos par\u00e2metros da fun\u00e7\u00e3o.<\/p>\n<p>H\u00e1 cinco fun\u00e7\u00f5es adicionais que podemos utilizar para recuperar partes espec\u00edficas da resposta. Basicamente, s\u00e3o cortes para navegar a massa de dados que recebemos:<\/p>\n<ul>\n<li><code>wp_remote_retrieve_body()<\/code><\/li>\n<li><code>wp_remote_retrieve_header()<\/code><\/li>\n<li><code>wp_remote_retrieve_headers()<\/code><\/li>\n<li><code>wp_remote_retrieve_response_code()<\/code><\/li>\n<li><code>wp_remote_retrieve_response_message()<\/code><\/li>\n<\/ul>\n<h3>Nossa primeira solicita\u00e7\u00e3o HTTP<\/h3>\n<p>Vamos fazer um teste r\u00e1pido, recuperando as informa\u00e7\u00f5es do cabe\u00e7alho do blog Kinsta. Voc\u00ea pode fazer isso em qualquer lugar dentro de um plugin ou tema, mas obviamente voc\u00ea deve estar dentro de um ambiente de teste para ter certeza de que n\u00e3o ir\u00e1 emitir textos indesejados em um site ao vivo.<\/p>\n<pre><code class=\"language-php\">$response = wp_remote_head( 'https:\/\/kinsta.com\/blog\/' );\nvar_dump( $response )<\/code><\/pre>\n<p>Como voc\u00ea pode ver pela resposta que obtemos abaixo, a se\u00e7\u00e3o do corpo est\u00e1 vazia (j\u00e1 que estamos usando o m\u00e9todo HEAD) e todos os cabe\u00e7alhos s\u00e3o mostrados. Para pegar somente os cabe\u00e7alhos sem todos os outros membros da matriz, poder\u00edamos usar a fun\u00e7\u00e3o <code>wp_remote_retrieve_headers()<\/code>.<\/p>\n<pre><code class=\"language-php\">array (size=5)\n  'headers' =&gt; \n    array (size=13)\n      'server' =&gt; string 'nginx' (length=5)\n      'date' =&gt; string 'Wed, 22 Jul 2015 14:22:07 GMT' (length=29)\n      'content-type' =&gt; string 'text\/html; charset=UTF-8' (length=24)\n      'connection' =&gt; string 'close' (length=5)\n      'vary' =&gt; string 'Accept-Encoding' (length=15)\n      'x-pingback' =&gt; string 'https:\/\/kinsta.com\/xmlrpc.php' (length=29)\n      'x-powered-by' =&gt; string 'HHVM\/3.8.0' (length=10)\n      'link' =&gt; string '; rel=\"https:\/\/github.com\/WP-API\/WP-API\"' (length=68)\n      'x-frame-options' =&gt; string 'DENY' (length=4)\n      'x-content-type-options' =&gt; string 'nosniff' (length=7)\n      'strict-transport-security' =&gt; string 'max-age=31536000' (length=16)\n      'x-kinsta-cache' =&gt; string 'HIT' (length=3)\n      'content-encoding' =&gt; string 'gzip' (length=4)\n  'body' =&gt; string '' (length=0)\n  'response' =&gt; \n    array (size=2)\n      'code' =&gt; int 200\n      'message' =&gt; string 'OK' (length=2)\n  'cookies' =&gt; \n    array (size=0)\n      empty\n  'filename' =&gt; null<\/code><\/pre>\n<h3>Fazendo sentido das APIs<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2015\/07\/twitter-wordpress-api.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full \" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2015\/07\/twitter-wordpress-api.png\" alt=\"twitter wordpress api\" width=\"800\" height=\"185\"><\/a><\/p>\n<p>A maior barreira que eu vejo para os desenvolvedores \u00e9 a enorme quantidade de coisas novas que eles precisam colocar em pr\u00e1tica para fazer uma chamada API funcionar. voc\u00ea precisa saber sobre HTTP, como fazer solicita\u00e7\u00f5es e tamb\u00e9m como autenticar corretamente, sem isso, cada chamada falhar\u00e1. Vejamos um exemplo atrav\u00e9s da API do Twitter, uma vez que eles t\u00eam uma \u00f3tima documenta\u00e7\u00e3o.<\/p>\n<p>Estaremos analisando a <a href=\"https:\/\/dev.twitter.com\/oauth\/application-only\">Autentica\u00e7\u00e3o somente para aplica\u00e7\u00f5es<\/a> (que \u00e9 um fluxo mais f\u00e1cil), eu estarei passando pelos mesmos passos que o Twitter sugere. Antes de come\u00e7armos, certifique-se de <a href=\"https:\/\/apps.twitter.com\/\">criar um aplicativo no Twitter<\/a>.<\/p>\n<p>Voc\u00ea deve ser capaz de adicionar o c\u00f3digo abaixo em qualquer lugar em um tema ou plugin, mas, como antes, certifique-se de usar um local de teste!<\/p>\n<h4>Passo 1: Codificar a chave e o segredo do consumidor<\/h4>\n<p>Uma vez criado um aplicativo, voc\u00ea deve ter uma chave do consumidor e um segredo em m\u00e3os. Para facilitar as coisas, vamos criar constantes que guardem essas informa\u00e7\u00f5es para n\u00f3s.<\/p>\n<pre><code class=\"language-php\">define( 'TWITTER_CONSUMER_KEY', '12disnir382jeqwdasd23wdasi' );\ndefine( 'TWITTER_CONSUMER_SECRET', '23wdajskduhtrq2c32cuq9r8uhuf' )<\/code><\/pre>\n<p>As tr\u00eas etapas de cria\u00e7\u00e3o de uma vers\u00e3o codificada destas est\u00e3o dispostas nos documentos:<\/p>\n<ul>\n<li>URL codifica a chave do consumidor e o segredo do consumidor<\/li>\n<li>Concat\u00ea-las com um c\u00f3lon<\/li>\n<li>Base64 codifica todo o cord\u00e3o<\/li>\n<\/ul>\n<p>Em PHP isso ser\u00e1 muito f\u00e1cil de fazer, aqui vai!<\/p>\n<pre><code class=\"language-php\">\n$key = urlencode( TWITTER_CONSUMER_KEY );\n$secret = urlencode( TWITTER_CONSUMER_SECRET );\n$concatenated = $key . ':' . $secret;\n$encoded = base64_encode( $concatenated );\n<\/code><\/pre>\n<h4>Passo 2: Obtendo um Token ao Portador<\/h4>\n<p>Em vez de usar sua senha real, voc\u00ea envia para o Twitter sua seq\u00fc\u00eancia codificada (que usa suas credenciais API) e recebe um passe tempor\u00e1rio que \u00e9 v\u00e1lido por um determinado per\u00edodo de tempo. Para fazer isso, faremos um pedido HTTP, aqui est\u00e1 o que o Twitter tem a dizer:<\/p>\n<ul>\n<li>A solicita\u00e7\u00e3o deve ser uma solicita\u00e7\u00e3o HTTP POST.<\/li>\n<li>O pedido deve incluir um cabe\u00e7alho de Autoriza\u00e7\u00e3o com o valor de Basic .<\/li>\n<li>A solicita\u00e7\u00e3o deve incluir um cabe\u00e7alho Content-Type com o valor de aplica\u00e7\u00e3o\/x-www-form-urlencoded;charset=UTF-8.<\/li>\n<li>O corpo do pedido deve ser grant_type=client_credentials.<\/li>\n<\/ul>\n<p>Vamos come\u00e7ar com o b\u00e1sico. Sabemos que precisamos de um pedido de P\u00d3S, ent\u00e3o estaremos usando <code>wp_remote_post()<\/code>. A fun\u00e7\u00e3o leva aos par\u00e2metros; o primeiro \u00e9 o URL, o segundo cont\u00e9m argumentos opcionais. A URL ser\u00e1 <code>https:\/\/api.twitter.com\/oauth2\/token<\/code>, usaremos o segundo par\u00e2metro para lidar com todos os outros requisitos.<\/p>\n<pre><code class=\"language-php\">$args = array(\n    'headers' =&gt; array(\n        'Authorization' =&gt; 'Basic ' . $encoded,\n        'Content-Type' =&gt; 'application\/x-www-form-urlencoded;charset=UTF-8'\n    ),\n    'body' =&gt; 'grant_type=client_credentials'\n);\n$response = wp_remote_post( 'https:\/\/api.twitter.com\/oauth2\/token', $args );\n<\/code><\/pre>\n<p>Os cabe\u00e7alhos precisam ser adicionados como uma matriz, sendo o tipo de cabe\u00e7alho a chave, o valor o valor do membro da matriz; O corpo deve ser uma corda. Se for bem sucedido, voc\u00ea deve ver uma resposta semelhante \u00e0 que est\u00e1 abaixo.<\/p>\n<pre><code class=\"language-php\">array (size=5)\n  'headers' =&gt; \n    array (size=23)\n      'cache-control' =&gt; string 'no-cache, no-store, must-revalidate, pre-check=0, post-check=0' (length=62)\n      'content-disposition' =&gt; string 'attachment; filename=json.json' (length=30)\n      'content-encoding' =&gt; string 'deflate' (length=7)\n      'content-length' =&gt; string '142' (length=3)\n      'content-type' =&gt; string 'application\/json;charset=utf-8' (length=30)\n      'date' =&gt; string 'Wed, 22 Jul 2015 14:47:37 GMT' (length=29)\n      'expires' =&gt; string 'Tue, 31 Mar 1981 05:00:00 GMT' (length=29)\n      'last-modified' =&gt; string 'Wed, 22 Jul 2015 14:47:37 GMT' (length=29)\n      'ml' =&gt; string 'A' (length=1)\n      'pragma' =&gt; string 'no-cache' (length=8)\n      'server' =&gt; string 'tsa_b' (length=5)\n      'set-cookie' =&gt; string 'guest_id=v1%3A14375720938219946; Domain=.twitter.com; Path=\/; Expires=Fri, 21-Jul-2017 14:47:37 UTC' (length=100)\n      'status' =&gt; string '200 OK' (length=6)\n      'strict-transport-security' =&gt; string 'max-age=631138519' (length=17)\n      'x-connection-hash' =&gt; string 'd8b10926f99dwef93rd7edbe5a71a97a' (length=32)\n      'x-content-type-options' =&gt; string 'nosniff' (length=7)\n      'x-frame-options' =&gt; string 'SAMEORIGIN' (length=10)\n      'x-response-time' =&gt; string '34' (length=2)\n      'x-transaction' =&gt; string 'ef0ebwefweece62ef' (length=16)\n      'x-tsa-request-body-time' =&gt; string '0' (length=1)\n      'x-twitter-response-tags' =&gt; string 'BouncerCompliant' (length=16)\n      'x-ua-compatible' =&gt; string 'IE=edge,chrome=1' (length=16)\n      'x-xss-protection' =&gt; string '1; mode=block' (length=13)\n  'body' =&gt; string '{\"token_type\":\"bearer\",\"access_token\":\"AAAAAAAAAAAAAAAAAAAAAFoafQAAAAAAqg%2BxmuH83hjsod6crH5bKTUX9Arc%3D5dWpp0XCTDjyiXxMC7LDLg8JbzPdGlCsJi2R1qjY1FMksTAFyG\"}' (length=155)\n  'response' =&gt; \n    array (size=2)\n      'code' =&gt; int 200\n      'message' =&gt; string 'OK' (length=2)\n  'cookies' =&gt; \n    array (size=1)\n      0 =&gt; \n        object(WP_Http_Cookie)[303]\n          public 'name' =&gt; string 'guest_id' (length=8)\n          public 'value' =&gt; string 'v1:143757645770219946' (length=21)\n          public 'expires' =&gt; int 1500648457\n          public 'path' =&gt; string '\/' (length=1)\n          public 'domain' =&gt; string '.twitter.com' (length=12)\n  'filename' =&gt; null<\/code><\/pre>\n<p>O principal destaque de tudo isso \u00e9 a ficha de acesso que pode ser encontrada no corpo da resposta. Vamos recuperar isso agora usando nossas \u00fateis fun\u00e7\u00f5es de WordPress. Continuando a partir de nosso exemplo anterior, poder\u00edamos pegar o token de acesso usando o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-php\">$body = wp_remote_retrieve_body( $response );\n$body = json_decode( $body, true );\n$access_token = $body['access_token'];<\/code><\/pre>\n<h4>Etapa 3: Utilize o Token ao Portador<\/h4>\n<p>O \u00faltimo passo \u00e9 simplesmente usar esta ficha portadora em todas as outras chamadas API. Precisamos adicion\u00e1-lo como um cabe\u00e7alho de &#8220;Autoriza\u00e7\u00e3o&#8221; com o valor: <code>Bearer [bearer_token]<\/code>. Vamos fazer uma simples chamada API que ir\u00e1 recuperar os \u00faltimos tweets de um usu\u00e1rio usando o caminho <a href=\"https:\/\/dev.twitter.com\/rest\/reference\/get\/statuses\/user_timeline\">user_timeline.<\/a><\/p>\n<pre><code class=\"language-php\">$url = 'https:\/\/api.twitter.com\/1.1\/statuses\/user_timeline.json?screen_name=danielpataki&count=3';\n$args = array(\n    'headers' =&gt; array(\n        'Authorization' =&gt; 'Bearer ' . $access_token,\n    ),\n);\n\n$response = wp_remote_get( $url, $args );\n$tweets = json_decode( wp_remote_retrieve_body($response), true )\n<\/code><\/pre>\n<p>No final de tudo isso, a vari\u00e1vel <code>$tweets<\/code> conter\u00e1 uma variedade de tweets. Voc\u00ea pode usar v\u00e1rias propriedades desta matriz para exibir o tweet ou manipular os dados.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Como voc\u00ea pode ver, usar o WordPress HTTP API para se conectar a servi\u00e7os externos n\u00e3o \u00e9 t\u00e3o dif\u00edcil. Muitas das APIs modernas de hoje s\u00e3o constru\u00eddas em torno dos mesmos princ\u00edpios REST &#8211; uma vez que voc\u00ea aprende uma, voc\u00ea vai pegar o jeito de outras muito rapidamente.<\/p>\n<p>Tenha em mente que sempre que a documenta\u00e7\u00e3o lhe pedir para usar o corpo, use o corpo e quando ele pedir cabe\u00e7alhos, basta adicionar quantos forem necess\u00e1rios. Depois, olhe a resposta, converta-a em uma matriz, pegue os dados necess\u00e1rios e use-os, \u00e9 t\u00e3o simples quanto isso.<\/p>\n<p>Se algu\u00e9m j\u00e1 trabalhou com uma API particularmente boa ou ruim antes, ou se voc\u00ea tem algumas dicas e truques usando a API HTTP do WordPress, informe-nos nos coment\u00e1rios!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the things I love about WordPress is all the tools it gives you. Some of these are well known and much-used, like the options and meta APIs. Some are under-utilized, even though they provide great functionality which could make our lives so much easier. Today I&#8217;ll be looking at one of these, the HTTP API.<\/p>\n","protected":false},"author":18,"featured_media":40982,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[367,30],"topic":[951,1026],"class_list":["post-40978","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-api","tag-wordpress","topic-api","topic-desenvolvimento-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Usando o WordPress HTTP API - Kinsta<\/title>\n<meta name=\"description\" content=\"A API do WordPress HTTP ajudar\u00e1 voc\u00ea a fazer chamadas HTTP com muito mais facilidade. Este \u00e9 um tutorial completo sobre como utiliz\u00e1-lo no WordPress.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Usando o WordPress HTTP API\" \/>\n<meta property=\"og:description\" content=\"A API do WordPress HTTP ajudar\u00e1 voc\u00ea a fazer chamadas HTTP com muito mais facilidade. Este \u00e9 um tutorial completo sobre como utiliz\u00e1-lo no WordPress.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-12-15T09:13:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-21T13:10:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/12\/wordpress-http-api.png\" \/>\n\t<meta property=\"og:image:width\" content=\"768\" \/>\n\t<meta property=\"og:image:height\" content=\"480\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Daniel Pataki\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"A API do WordPress HTTP ajudar\u00e1 voc\u00ea a fazer chamadas HTTP com muito mais facilidade. Este \u00e9 um tutorial completo sobre como utiliz\u00e1-lo no WordPress.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/12\/wordpress-http-api.png\" \/>\n<meta name=\"twitter:creator\" content=\"@danielpataki\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Pataki\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/\"},\"author\":{\"name\":\"Daniel Pataki\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/b162216499225e1a4cdd35518f8ef0ff\"},\"headline\":\"Usando o WordPress HTTP API\",\"datePublished\":\"2020-12-15T09:13:20+00:00\",\"dateModified\":\"2023-08-21T13:10:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/\"},\"wordCount\":1617,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/12\/wordpress-http-api.png\",\"keywords\":[\"API\",\"WordPress\"],\"articleSection\":[\"Desenvolvimento WordPress\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/\",\"name\":\"Usando o WordPress HTTP API - Kinsta\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/12\/wordpress-http-api.png\",\"datePublished\":\"2020-12-15T09:13:20+00:00\",\"dateModified\":\"2023-08-21T13:10:19+00:00\",\"description\":\"A API do WordPress HTTP ajudar\u00e1 voc\u00ea a fazer chamadas HTTP com muito mais facilidade. Este \u00e9 um tutorial completo sobre como utiliz\u00e1-lo no WordPress.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/12\/wordpress-http-api.png\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/12\/wordpress-http-api.png\",\"width\":768,\"height\":480,\"caption\":\"wordpress-http-api\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Usando o WordPress HTTP API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/b162216499225e1a4cdd35518f8ef0ff\",\"name\":\"Daniel Pataki\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2a44c1ab807766aeaa5c8d76d4c5ea66?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2a44c1ab807766aeaa5c8d76d4c5ea66?s=96&d=mm&r=g\",\"caption\":\"Daniel Pataki\"},\"description\":\"Hi, my name is Daniel, I'm the CTO here at Kinsta. You may know me from Smashing Magazine, WPMU Dev, Tuts+ and other WordPress\/Development magazines. Aside from WordPress and PHP I spend most of my time around Node, React, GraphQL and other technologies in the Javascript space. When not working on making the best hosting solution in the Universe I collect board games, play table football in the office, travel or play guitar and sing in a pretty bad band.\",\"sameAs\":[\"http:\/\/danielpataki.com\",\"https:\/\/x.com\/danielpataki\"],\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/danielpataki\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Usando o WordPress HTTP API - Kinsta","description":"A API do WordPress HTTP ajudar\u00e1 voc\u00ea a fazer chamadas HTTP com muito mais facilidade. Este \u00e9 um tutorial completo sobre como utiliz\u00e1-lo no WordPress.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/","og_locale":"pt_PT","og_type":"article","og_title":"Usando o WordPress HTTP API","og_description":"A API do WordPress HTTP ajudar\u00e1 voc\u00ea a fazer chamadas HTTP com muito mais facilidade. Este \u00e9 um tutorial completo sobre como utiliz\u00e1-lo no WordPress.","og_url":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2020-12-15T09:13:20+00:00","article_modified_time":"2023-08-21T13:10:19+00:00","og_image":[{"width":768,"height":480,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/12\/wordpress-http-api.png","type":"image\/png"}],"author":"Daniel Pataki","twitter_card":"summary_large_image","twitter_description":"A API do WordPress HTTP ajudar\u00e1 voc\u00ea a fazer chamadas HTTP com muito mais facilidade. Este \u00e9 um tutorial completo sobre como utiliz\u00e1-lo no WordPress.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/12\/wordpress-http-api.png","twitter_creator":"@danielpataki","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Daniel Pataki","Tempo estimado de leitura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/"},"author":{"name":"Daniel Pataki","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/b162216499225e1a4cdd35518f8ef0ff"},"headline":"Usando o WordPress HTTP API","datePublished":"2020-12-15T09:13:20+00:00","dateModified":"2023-08-21T13:10:19+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/"},"wordCount":1617,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/12\/wordpress-http-api.png","keywords":["API","WordPress"],"articleSection":["Desenvolvimento WordPress"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/","url":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/","name":"Usando o WordPress HTTP API - Kinsta","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/12\/wordpress-http-api.png","datePublished":"2020-12-15T09:13:20+00:00","dateModified":"2023-08-21T13:10:19+00:00","description":"A API do WordPress HTTP ajudar\u00e1 voc\u00ea a fazer chamadas HTTP com muito mais facilidade. Este \u00e9 um tutorial completo sobre como utiliz\u00e1-lo no WordPress.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/12\/wordpress-http-api.png","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/12\/wordpress-http-api.png","width":768,"height":480,"caption":"wordpress-http-api"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/wordpress-http-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/pt\/topicos\/api\/"},{"@type":"ListItem","position":3,"name":"Usando o WordPress HTTP API"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/b162216499225e1a4cdd35518f8ef0ff","name":"Daniel Pataki","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2a44c1ab807766aeaa5c8d76d4c5ea66?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2a44c1ab807766aeaa5c8d76d4c5ea66?s=96&d=mm&r=g","caption":"Daniel Pataki"},"description":"Hi, my name is Daniel, I'm the CTO here at Kinsta. You may know me from Smashing Magazine, WPMU Dev, Tuts+ and other WordPress\/Development magazines. Aside from WordPress and PHP I spend most of my time around Node, React, GraphQL and other technologies in the Javascript space. When not working on making the best hosting solution in the Universe I collect board games, play table football in the office, travel or play guitar and sing in a pretty bad band.","sameAs":["http:\/\/danielpataki.com","https:\/\/x.com\/danielpataki"],"url":"https:\/\/kinsta.com\/pt\/blog\/author\/danielpataki\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/40978","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=40978"}],"version-history":[{"count":3,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/40978\/revisions"}],"predecessor-version":[{"id":41065,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/40978\/revisions\/41065"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/40978\/translations\/en"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/40978\/translations\/de"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/40978\/translations\/it"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/40978\/translations\/es"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/40978\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/40978\/translations\/fr"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/40978\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/40982"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=40978"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=40978"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=40978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}