Criando API — CRUD com Clojure
Opa… A algum tempo eu não faço nenhum artigo relacionado a Clojure, ou relacionado a qualquer outro assunto rs…
Nesse artigo vou mostrar um exemplo bem simples de um CRUD, sei que CRUD é algo super batido, pois os frameworks hoje fazem mágica e quase não escrevemos mais código, mas la vamos nós!!!
Estou assumindo que vocês tem um MySQL rodando na sua máquina, ou mesmo em um container Docker.
Agora é hora de criar o projeto, e como já expliquei em alguns arquivos vamos utilizar o comando leiningen
para criar o projeto.
Quem ainda não instalou, essa é a hora, o link do leiningen
é: https://leiningen.org
➜ ~ lein new compojure todo
Feito isso, vamos entrar no diretório do projeto para ver o que temos:
✗ cd todo/
O que o leiningen
criou para nós foi essa estrutura de projeto que já conhecemos:
➜ todo git:(master) ✗ ls -l
total 32
-rw-r — r — 1 gilmar staff 262 Jan 27 10:16 README.md
-rw-r — r — 1 gilmar staff 636 Jan 27 10:20 project.clj
drwxr-xr-x 3 gilmar staff 96 Jan 25 15:20 resources
drwxr-xr-x 3 gilmar staff 96 Jan 27 10:15 src
drwxr-xr-x 4 gilmar staff 128 Jan 25 15:20 target
drwxr-xr-x 3 gilmar staff 96 Jan 27 10:16 test
-rw-r — r — 1 gilmar staff 4788 Jan 27 10:18 todo.iml
➜ todo git:(master) ✗
Bom, primeiro de tudo vamos adicionar as dependencias do nosso projeto, e para isso, deixe o seu arquito project.clj
como o arquivo abaixo:
Vou explicar de forma simples a lib korma que não tinha mostrado anteriormente. Korma
é uma lib que vai facilitar nossas queries no MySQL. Um simples exemplo:
user=> (select items)
Esse select
é da lib korma
e vai facilitar nossa vida com todas as operações de Banco de Dados, não necessáriamente MySQL, podemos trabalhar com todos esses bancos de dados:
Bom, vamos seguir com a criação do CRUD. Precisamos de uma base de dados no MySQL, estou assumindo que vocês já tem MySQL instalado na sua maquina como falei anteriormente, vamos apenas criar um DATABASE
e uma TABELA
bem simples. Abaixo comandos:
Ok. Já fizemos muito código SQL, é hora de voltar ao Clojure. Dentro de src/todo
vamos criar um arquivo chamado database.clj
.
Basicamente nesse arquivo database.clj
temos a configuração de Banco de Dados. Podemos pegar esses dados de DB de N lugares, arquivos de configuração, variável de ambiente.
Bom, é hora de fazer as queries para inserir, fazer select, update ou delete da tabela items
que criamos anteriormente, portanto vamos criar um arquivo query.clj
.
Bom, agora ficou simples, as queries são fáceis de entender. É praticamente a mesma coisa que SQL
, claro adicionando nossos ()
.
Agora vamos editar o arquivo handler.clj
que o leiningen
criou no inicio do projeto, e vamos enfim adicionar nossos endpoints para criar nossa API.
O arquivo handler.clj
vai ficar assim:
Em resumo, temos nossas rotas da API, seus verbos configurados com GET, PUT, POST e DELETE, e estamos executando nossas queries criadas anteriormente.
Bom, agora é hora de executar essa aplicação e ver o resultado. Execute:
lein ring server
Após executar sua API estará disponível na porta 3001.
➜ todo git:(master) ✗ lein ring server
WARNING: update already refers to: #’clojure.core/update in namespace: korma.core, being replaced by: #’korma.core/update
WARNING: update already refers to: #’clojure.core/update in namespace: todo.query, being replaced by: #’korma.core/update
2018–01–27 11:28:21.985:INFO:oejs.Server:jetty-7.6.13.v20130916
2018–01–27 11:28:22.042:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:3000
Started server on port 3000
Vamos criar uns items
usando nossa API e o verbo POST.
Eu estou utilizando a aplicação insomnia
para executar as ações no endpoint que criamos, então um POST na nossa aplicação vai fizer assim:
Agora vamos fazer um GET e ver o resultado, eu já tenho vários items na base de dados:
Bom, se precisarem de ajuda, ou mesmo tiver dificuldades para criar a aplicação, o link do github do projeto é: https://github.com/linuxsoares/artigos-clojure/tree/master/todo
Ou podem falar diretamente comigo que ajudo no que precisarem.
Por hora é isso, abaixo segue link dos outros artigos plublicados no medium.
- Hello World;
- Criar nossas próprias funções;
- Utilizando funções existentes do Clojure;
- Criando nosso primeiro projeto Clojure;
- Criando API com Clojure;
- Criando WebAPP com Clojure;
- Ver como criamos funções e como podemos re-utilizar em nosso projetos;
- Criar projeto web;
- Utilizar Classes Java em funções Clojure;