Skip to content

Tipos de corpo HTTP

O corpo de uma mensagem HTTP, também conhecido como body, é uma seqüência de bytes que vem após os cabeçalhos (headers).

Tanto requisições como respostas podem ter corpos.

A seguir, estão os tipos de corpos de requisição HTTP suportados pelo Pororoca.

Nenhum

Uma mensagem HTTP pode vir sem corpo.

Texto

Nesse caso, um texto é convertido em bytes UTF-8, que se tornam o corpo da requisição.

No Pororoca, é necessário especificar o MIME type do texto. Por exemplo, um corpo JSON usa como MIME type application/json.

Arquivo

Para esse caso, os bytes de um arquivo formarão o corpo da requisição.

O MIME type também é necessário, sendo que o Pororoca consegue inferir o MIME type pela extensão do arquivo.

Form URL encoded

São pares simples de chave-valor de textos que são convertidos em strings URL-encoded, pareados com = e juntados com &.

O MIME type é sempre application/x-www-form-urlencoded.

Considere os seguintes pares chave-valor:

ChaveValor
axyz
b123
cabc à é

O corpo da requisição será os bytes UTF-8 da string: a=xyz&b=123&c=abc+%C3%A0+%C3%A9.

Multipart form data

Este é um tipo mais complexo de corpo. É dividido em partes delimitadas por boundaries (fronteiras) e cada parte tem seu próprio MIME type. A boundary é auto-gerada e geralmente é um GUID.

No Pororoca, uma parte pode ser um texto ou o conteúdo de um arquivo.

A requisição final é algo como:

POST /test HTTP/1.1
Host: foo.example
Content-Type: multipart/form-data; boundary="9e0248d8-f117-404e-a46b-51f0382d00bd"

--9e0248d8-f117-404e-a46b-51f0382d00bd
Content-Type: text/plain
Content-Disposition: form-data; name="field1"

value1
--9e0248d8-f117-404e-a46b-51f0382d00bd
Content-Type: image/gif
Content-Disposition: form-data; name="field2"; filename="pirata.gif"

(bytes do arquivo pirata.gif)
--9e0248d8-f117-404e-a46b-51f0382d00bd--

GraphQL

O GraphQL é uma linguagem de pesquisa de dados que delega ao obtentor definir quais campos de informação ele quer, de modo a evitar pesquisar e transmitir dados que não são relevantes para este obtentor de dados em particular.

É composto por uma query e sua variáveis, ambas seguindo a sintaxe GraphQL.

O corpo resultante será um JSON, como:

json
{
  "query": "(sua query GraphQL)",
  "variables": "(suas variáveis GraphQL)"
}