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:
Chave | Valor |
---|---|
a | xyz |
b | 123 |
c | abc à é |
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 permite especificar quais campos de informação se quer, para evitar buscar dados que não são relevantes.
É composto por uma query e sua variáveis, ambas seguindo a sintaxe GraphQL.
O corpo resultante será um JSON, como:
{
"query": "(sua query GraphQL)",
"variables": "(suas variáveis GraphQL)"
}