API HTTP: Clojure e Pedestal

Marina Cavalari
4 min readJul 14, 2021

--

Em 2017 eu aprendi a fazer minha primeira requisição HTTP, e entender o que isso seria. A primeira vez que bati em um endpoint, sabendo o que era um endpoint, foi pra fazer uma automação no meu trabalho, usando uma plataforma de assinaturas on-line, e eu usei o Postman pra isso.

Sempre achei isso muito mágico, e sempre quis fazer o meu próprio endpoint, do meu site, e expor ao mundo minhas ideias e mente bagunçada. Minha primeira aplicação web (com back-end, diga-se de passagem) foi feita usando Clojure e Pedestal, via Leiningen.

Pedestal é um conjunto de bibliotecas para lidar com requisições HTTP server-side, e funciona semelhante a outras bibliotecas/frameworks como Django para Python, mas não se trata de um framework, Pedestal é apenas um conjunto de bibliotecas Clojure que disponibiliza para o usuário final a criação de interceptors que são os responsáveis por interceptar as requisições e respostas, e então tratá-las, do modo que o usuário preferir. Ele é muito usado pela comunidade Clojure por ser um conjunto de funções que somente lidam com dados e não necessita de macros para a criação de ações referente às rotas, além de ser feito em Clojure (mamão com açúcar). O Pedestal é uma ferramenta muito boa pois traz consigo inúmeras vantagens, como por exemplo: Não é necessário nenhum padrão de rotas pré definido, cabendo a você a escolha da melhor forma de criar sua rota, consegue lidar muito bem com erros que no final acaba sendo somente mais um interceptor seu, funções testáveis, suporte para websocket, entre muitas outras coisas.

A utilização dele no código é intuitiva, e super prática, conforme abaixo:

  • Adicionamos a principal dependência ao nosso projeto:
[io.pedestal/pedestal.service "0.5.8"]
  • Criamos nossa rota como descrito abaixo:

Nesse nosso exemplo de Hello World, podemos identificar as seguintes funções:

  • A própria hello-world, que aqui é a nossa função que será usada para exibir o body da requisição e seu status, tendo como paramêtro, o nome passado através da query parameter da request;
  • routes contém a lista de todas as rotas do nosso servidor, sendo que cada rota, é um vetor de elementos necessários para a criação da mesma, como por exemplo, seu nome, verbo HTTP, e o interceptor, ou uma lista deles, que será usado na nossa chamada, no nosso caso vamos usar apenas o interceptor hello-world que é a nossa função.
  • A service aqui é uma def que indica todas as configurações para o nosso servidor, ou seja, em qual porta ele deve iniciar, o tipo de ambiente que irá utilizar, etc.
  • start-server! é a função responsável por iniciar o nosso servidor.

O código completo pode ser encontrado nesse repo e é um exemplo da própria documentação do Pedestal.

Uma vez adicionado ao nosso projeto, o Pedestal já é capaz de fazer essa ponte para nós, entre a web e a nossa aplicação back-end. Nesse arquivo, podemos entender como as rotas funcionam em um projeto em “prod” e como o Pedestal faz o papel do servidor, das rotas, e da leitura dos parâmetros de uma determinada requisição. E tcharam, nossa aplicação já está pronta para receber requisições http, ou em outras palavras, podemos criar um front-end que se conecta a essas rotas. Nada, além disso é necessário (e o front end, é apenas um adicional nessa fase), dessa forma podemos ver o quão simples e plugável o Pedestal consegue ser, ajudando muito no processo de desenvolvimento de APIs.

Nesse projeto, vocês conseguem ter uma ideia de uma aplicação inteira web (com front e back-end) usando Clojure e Pedestal para fazer as requisições e levar as respostas para o usuário na tela. O Modix, é o primeiro projeto mais complexo que fiz depois de estudar Clojure e suas estruturas durante um tempo. A ideia de criar um catálogo de roupa é só uma demonstração de quanto eu amo moda, e que agora, sou capaz de colocar os tais pensamentos da mente de uma forma organizada, e ajudar mais pessoas a conhecer novas ferramentas e formas de criar coisas.

Blair rainha, o resto nadinha.

Coisas úteis para conexões simples usando o Pedestal

Pra quem acha que o Pedestal é pra ser usado apenas com back-ends Clojure, fomos surpreendidos novamente, pois ele é compatível com as opções abaixo:

  • AWS — API Gateway
  • AWS — Lambda
  • AWS — X-Ray
  • WebSocket

Por conta da escassez de informações em português, algumas pessoas podem ter dúvidas em relação a esse lib e muitas outras, dessa forma, esse artigo busca tornar a informação o mais acessível possível.

--

--