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 https://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

Oi, meu nome é Daniel, sou o CTO aqui na Kinsta. Você talvez me conheça da Smashing Magazine, WPMU Dev, Tuts+ e outras revistas de WordPress/Desenvolvimento. Além de WordPress e PHP, passo a maior parte do meu tempo com Node, React, GraphQL e outras tecnologias no espaço Javascript. Quando não estou trabalhando para criar a melhor solução de hospedagem do universo, coleciono jogos de tabuleiro, jogo pebolim no escritório, viajo ou toco guitarra e canto em uma banda não muito boa.