Usando http client do Intellij
Ao desenvolver ou utilizar uma api rest, costumeiramente é necessária a utilização de um http client (curl, Postman, Insomnia etc) que facilite a edição das requisições http.
Há pouco tempo, eu utilizava o Postman, mas algumas coisas dele me incomodavam:
- Dificuldade para encontrar requisições salvas
- Não versionar as requisições junto com o código
- Ser mais uma janela aberta
- Lidar com múltiplus ambientes onde roda-se a mesma aplicação
Assim, comecei a utilizar o cliente http presente no próprio Intelij, o que tornou meu desenvolvimento mais fluído.
COMO USAR
Para utilizar, basta criar um arquivo no projeto de extensão .http. A partir daí, basta começar a escrever as requisições de acordo com a sintaxe.
Ter que escrever requisições em texto puro pode assustar alguns devs (e animar outros). Uma forma de poupar um pouco de trabalho é utilizar a opção "Generate Request in HTTP Client", embora isso só gere o endpoint e o verbo http.
Multiplas requisições podem ser criadas no mesmo arquivo, e serem executadas seperadamente (assim como arquivos .sql)
MÃO A MASSA
A requisição mais simples ao qual estamos acostumados são GET para leitura de todos os valores, não especificando parâmetros. Um exemplo disto se encontra abaixo:
### List taggedObjects in default namespace
GET http://{{tagger-host}}/tagger/taggedObject
Embora esse cliente não ofereça ferramentas para lidar com os parâmetros passados pela url, na maioriados casos uma quebra de linha é o suficiente para organizar o código:
### List enriched taggedObjects in smart-grid namespace
GET http://{{tagger-host}}/tagger/taggedObject
?namespace=smart-grid
&enrich=true
Para requesições POST e PUT, que corriqueiramente necessitam de headers e bodies, podem ser complementadas adicionando um header por linha imediatamente após sua declaração, e ao pular uma linha em branco, o body pode ser explicitado:
POST http://{{tagger-host}}/tagger/taggedObject/tagExpression
Content-Type: application/json
{
"expression": "not(block:academic and circuit:lifts)",
"namespace": "smart-grid",
"type": "Resource",
"enrich": "true"
}
Parametrizando
Em todos exemplos acima, o nome do host foi substituído por {{tagger-host}}. Isto porque existem 3 ambientes onde costumo ter essa aplicação rodando (No próprio Intelij, num k8s local e em um k8s remoto).
. Utilizando variáveis é possível editar tais requisições para lidar com os 3 ambientes.
ATENÇÃO: Nesse sentido, é interessante versionar e taggear os commit. Pois permite lidar com diferentes versões da mesma aplicação.
Para especificar os possíveis parâmetros, clique em Add environment file:
{
"dev": {
"tagger-host": "localhost:8180",
"outra-variavel": "xxxxxxx"
},
"outro-ambiente": {
"tagger-host": "exemplo.com",
"outra-variavel": "yyyyyyy"
}
}
Conclusão
O cliente http do Intelij é uma ferramenta simples, sem muitos recursos avançados. Para alguns perfis de desenvolvedores(e administradores de sistemas) isso é uma qualidade. Ainda assim, existem recursos muito úteis (como validação e auxílio para edição de json, possibilidade de parametrização e conversor para curl).
No uso coditiano, tem se mostrado uma boa forma de mostrar a equipe como utilizar certo endpoint recém desenvolvido.