Em preparação, pensei em dar uma olhada em como HTTP funciona, em geral, e como você pode usar as funções nativas do WordPress para trabalhar com ele, abrindo seus produtos para integração com Twitter, Facebook, Mailchimp e todos os tipos de outras ferramentas.

Neste artigo – parte 1 de 2 – mostrarei a você o básico dos pedidos HTTP, como eles estão estruturados, as informações que eles contêm e como dar sentido a eles. Na parte 2 vamos colocar nosso conhecimento em prática – através do WordPress.

O que é HTTP

HTTP é o principal protocolo utilizado na web hoje em dia, ele representa o Hypertext Transfer Protocol e é responsável por lhe mostrar HTML, imagens e muito mais. Clientes HTTP – como seu navegador – enviam solicitações para servidores HTTP que enviam de volta uma resposta.

Por exemplo, se você apontar seu navegador para Kinsta.com você está enviando uma solicitação para os servidores da Kinsta. O servidor lê seu pedido, descobre o que você precisa (falaremos sobre como isto acontece em breve) e envia de volta uma resposta que contém o código HTML para a página. Seu navegador lê a resposta e apresenta o código HTML para você na tela.

Noções básicas de solicitação HTTP

Qualquer transação entre um cliente e um servidor começa com uma solicitação HTTP. Às duas partes mais importantes de uma solicitação são o nome do método e a URL do recurso solicitado. Vamos começar com esta última.

Recursos

Um recurso é um pedaço de dado que pode ser identificado com uma URL. Por exemplo: http://myblog.com/my-awesome-article provavelmente retornará um arquivo HTML – o código necessário para renderizar seu artigo fantástico.

Nomes dos métodos

Os nomes dos métodos identificam o tipo de ação que você deseja realizar no recurso. O navegador quase sempre usa GET que indica que você gostaria de recuperar o recurso.

Outros métodos incluem o POST para criar novos itens, PUT para atualizar itens, DELETE para apagar itens e HEAD para obter informações de cabeçalho.

Estes nomes de métodos, juntamente com URLs, fornecem a base das APIs REST. Você poderia enviar uma solicitação de obtenção para /article/4 para recuperar o artigo 4. Você também poderia enviar uma solicitação PUT junto com alguns dados para modificá-la, ou uma solicitação DELETE para removê-la.

A estrutura do HTTP

As solicitações e respostas HTTP são muito semelhantes de um ponto de vista estrutural. Cada uma delas tem quatro partes distintas:

  • Uma linha inicial que é diferente para o pedido e a resposta
  • Cabeçalhos opcionais que contêm informações sobre a solicitação ou resposta
  • Uma linha em branco
  • Conteúdo opcional do corpo

1. A linha inicial

Para solicitações, a linha inicial contém três informações: o nome do método, o caminho do recurso e a versão HTTP utilizada. Veja como pode parecer:

GET /users/4 HTTP/1.1

Note que esta linha contém o caminho relativo local e não a URL completa. A URL base é enviada em um cabeçalho (o cabeçalho Host), vamos dar uma olhada nos cabeçalhos em breve.

As respostas também contêm três pedaços de informação: a versão HTTP, o código de status e um motivo que descreve o código de status.

HTTP/1.1 302 Moved Temporarily

Para uma lista de todos os códigos de status e um pouco sobre cada um deles, dê uma olhada na Especificação de Códigos de Status HTTP, está tudo muito claro lá.

2. Cabeçalhos

Os cabeçalhos são essencialmente pares de informações nominativas e nominativas. O cabeçalho Host mencionado anteriormente é um bom exemplo, na verdade, é o único cabeçalho necessário no HTTP 1.1. Os cabeçalhos lhe dão mais controle e mais informações.

O cabeçalho Accept permite especificar o tipo de conteúdo que você permitirá em uma solicitação. O cabeçalho Accept-Language permite que você controle o idioma do conteúdo que você está disposto a aceitar. Ambos são formas de negociação de conteúdo.

O cabeçalho Authorization é um cabeçalho que você usará muito quando trabalhar com APIs para acessar ações somente de autorização como excluir um Tweet ou acessar sua conta de usuário.

3. Corpo

O corpo é onde o recurso é devolvido, ou onde mais explicações podem ser dadas caso você tiver encontrado um erro. Você pode usar seu idioma de escolha para ler os dados do corpo e exibi-los, ou usá-los internamente para lidar com erros.

Usando HTTP

Descobri que a compreensão do HTTP foi de grande ajuda na negociação da documentação para APIs de terceiros. O que complica o uso do HTTP é que você normalmente o utiliza dentro de uma linguagem de programação, o que significa que você precisa estar familiarizado com a forma como essa linguagem implementa o HTTP, bem como com o próprio HTTP.

Uma vez feito o pedido, você precisará ler a resposta, saber que informações obter dela, talvez até mesmo executar a resposta através de algumas funções para convertê-la no formato que você precisa. Uma vez que você tenha essa informação, poderá exibi-la, salvá-la em um banco de dados ou manipulá-la de outra forma.

O HTTP não é difícil, mas as tarefas que você deve realizar além de fazer/receber um pedido podem se acumular muito rapidamente, mascarando a simplicidade do HTTP em um manto de complexidade. Além disso, muitas APIs exigirão que você se autentique, o que acrescenta outra camada sobre tudo isso.

cURL

cURL é uma forma de interagir com HTTP, mas é bastante complexa. Ele pode ser usado a partir do terminal, mas o PHP também tem suporte a cURL. Para obter o conteúdo de uma URL, você poderia usar o seguinte no terminal.

curl http://kinsta.com

O problema é que o uso do cURL no terminal pode ser um, mas complexo. Para visualizar somente as informações de cabeçalho, você precisaria usar o seguinte formulário:

curl -s -D - http://danielpataki.com -o /dev/null

Você pode ver uma lista de todos os parâmetros, mas é provável que você esteja usando cURL em seu aplicativo web, então vamos ver cURL em PHP, aqui está como obter o conteúdo da mesma página:

$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
echo $data;

Isto ainda é um pouco desajeitado, mas usando o Guia PHP você pode descobrir o que é o quê.

Usando WordPress

cURL é ótimo, mas adicionar cabeçalhos e lidar com informações retornadas não é tão fácil como você pode estar acostumado caso você trabalha com classes e funções PHP bem codificadas. Felizmente, o WordPress nos tem coberto com sua API HTTP. Vamos examiná-la em detalhes no próximo artigo, por enquanto, aqui está um exemplo da função nativa do WordPress, incluindo a adição de cabeçalhos:

$request = wp_remote_get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=kinsta, array(
    'headers' => array(
        'Authorization' => 'Bearer ' . $token,
    ),
));

Resumo

HTTP é a base de tudo o que fazemos na web e saber o que acontece em uma solicitação e uma resposta nos dá grandes capacidades de solução de problemas e nos permite controlar melhor nossos aplicativos.

Ao aprender o básico do HTTP, você poderá utilizar as APIs externas mais rápido e melhor, sabendo exatamente o que fazer com as informações dadas a você nos guias das APIs.

No próximo artigo da série, examinaremos como você pode lidar com dados HTTP com o WordPress e como você pode conectar o WordPress com um serviço de terceiros muito facilmente.

Daniel Pataki

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.