Introdução
No mundo do desenvolvimento de software, a escolha da linguagem e framework pode influenciar significativamente a produtividade e a qualidade do produto final. Crystal é uma linguagem de programação moderna, semelhante ao Ruby, que combina a simplicidade da sintaxe concisa com a performance e a segurança de tipos de uma linguagem compilada. Neste tutorial, vamos explorar o framework minimalista Crystal, onde desbravaremos suas funcionalidades principais, destacando suas ferramentas essenciais. Abordaremos, também, as melhores práticas para garantir um desenvolvimento ágil e colaborativo em equipe. Ao final, você estará apto a implementar projetos que aproveitem ao máximo o potencial do Crystal, seja para desenvolver APIs ou aplicações web completas.
Etapas
Instalação do Crystal
Para começar a usar o Crystal, você deve instalá-lo em sua máquina. Verifique se você tem o compilador instalado utilizando o comando ‘crystal -v’. Caso não tenha, siga as instruções de instalação disponíveis na documentação oficial do Crystal.
commands# Verificar versão instalada
crystal -vCriando um Novo Projeto com Amber
Amber é um framework web para Crystal que se destaca pela simplicidade e eficiência. Para criar um novo projeto, você pode usar o gerador de projetos do Amber. Execute o seguinte comando para gerar um novo projeto chamado ‘minha_api’.
commandsamber new minha_api
cd minha_apiConfigurando o Banco de Dados
Para este projeto, iremos usar o SQLite como banco de dados. Edite o arquivo `config/database.yml` para ajustar as configurações do banco. Insira as informações necessárias para a conexão ao banco.
database.ymldevelopment: adapter: sqlite3 database: db/development.sqlite3
Criando um Modelo e Migrações
Vamos criar um modelo ‘Produto’ e suas migrações correspondentes. Execute os comandos abaixo para criar o modelo e gerar as migrações adequadas.
commandsamber g model Produto nome:String preco:Float
amber db migrateImplementando a Lógica do Controlador
No controlador `ProdutosController`, implemente a lógica para as operações CRUD. Abra o arquivo `src/controllers/produtos_controller.cr` e adicione as rotas e métodos necessários.
produtos_controller.crclass ProdutosController < ApplicationController action "index" do |env| produtos = Produto.all json produtos end action "show" do |env| produto = Produto.find(params.id) json produto end action "create" do |env| produto = Produto.new(Amber::JSON::Body.to_h) if produto.save json produto else json produto.errors, status: 422 end end action "update" do |env| produto = Produto.find(params.id) produto.assign(Amber::JSON::Body.to_h) if produto.save json produto else json produto.errors, status: 422 end end action "destroy" do |env| produto = Produto.find(params.id) produto.destroy json(value: "Produto deletado") end end
Configurando as Rotas
As rotas deliminam como os usuários interagem com a sua aplicação. Abra `src/routes.cr` e adicione as rotas para o controlador `ProdutosController`.
routes.crAmber::Router.draw do get "/produtos", to: ProdutosController.index post "/produtos", to: ProdutosController.create get "/produtos/{id}", to: ProdutosController.show put "/produtos/{id}", to: ProdutosController.update delete "/produtos/{id}", to: ProdutosController.destroy end
Executando a Aplicação
Com o banco de dados configurado e as rotas implementadas, você pode executar a aplicação. Utilize o comando abaixo para iniciar o servidor. Acesse a aplicação em http://localhost:3000/produtos para interagir com a API.
commandsamber serve
Adicionando Testes Unitários
O Crystal possui um framework de testes embutido. Crie um arquivo de teste para o modelo Produto, garantindo que as funcionalidades estejam funcionando corretamente. Crie o arquivo `produto_spec.cr` em `spec/models/` e adicione o seguinte código.
produto_spec.crrequire "spec" require "../src/models/produto" describe Produto do it "pode ser criado" do produto = Produto.new(nome: "Produto Teste", preco: 9.99) expect(produto.save).to be_truthy end end
Executando os Testes
Após implementar os testes, execute-os para garantir que tudo esteja funcionando corretamente. Utilize o comando abaixo na raiz do projeto.
commandscrystal spec
Conclusão
Neste tutorial, exploramos como desenvolver uma aplicação básica utilizando o Crystal e Amber. Começamos com a configuração do ambiente, passando pela criação de um modelo e suas migrações, até a implementação do controlador com as rotas apropriadas. Também discutimos a importância de testes unitários e mostramos como configurá-los. Agora, você possui uma base sólida para utilizar o Crystal em projetos futuros, podendo expandir sua aplicação com mais funcionalidades e recursos avançados.