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

  1. 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 -v

  2. Criando 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’.

    commands
    amber new minha_api
    cd minha_api

  3. Configurando 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.yml
    development:
      adapter: sqlite3
      database: db/development.sqlite3
    

  4. 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.

    commands
    amber g model Produto nome:String preco:Float
    amber db migrate

  5. Implementando 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.cr
    class 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

  6. 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.cr
    Amber::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

  7. 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.

    commands
    amber serve

  8. 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.cr
    require "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

  9. 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.

    commands
    crystal 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.

Hashtags

#Crystal #Amber #DesenvolvimentoÁgil #APIs #Programação #TestesUnitários