Introdução

Neste tutorial, vamos explorar o Crystal, uma linguagem de programação moderna e leve, que se inspira no Ruby, mas com foco em desempenho e segurança. O framework Amber será nosso ponto de partida para construir aplicações web performáticas. Você aprenderá a configurar o ambiente, criar uma API, implementar boas práticas de desenvolvimento e utilizar ferramentas de integração contínua para garantir que seu código permaneça robusto e mantenha a qualidade. Este guia é para desenvolvedores que desejam expandir seu conhecimento em Crystal e criar aplicações web rápidas e escaláveis utilizando o Amber.

Etapas

  1. Configuração do Ambiente de Desenvolvimento

    Primeiro, você precisa ter o Crystal instalado em sua máquina. Acesse o site oficial do Crystal para instruções de instalação. Após a instalação, utilize o comando `crystal -v` para verificar se a instalação foi bem-sucedida.

    commands
    # Verificar a versão do Crystal instalada
    crystal -v

  2. Criação do Projeto Amber

    Utilize o comando Amber para gerar um novo projeto. Isso cria a estrutura básica de diretórios e arquivos para a sua aplicação web.

    commands
    # Criar um novo projeto Amber chamado 'my_app'
    amber new my_app
    # Navegar para o diretório do projeto
    cd my_app

  3. Configuração do Banco de Dados

    No arquivo `config/database.yml`, configure os parâmetros de conexão com o banco de dados. Iremos usar o SQLite para simplicidade nesta demonstração.

    database.yml
    development:
      adapter: sqlite3
      database: db/development.sqlite3

  4. Criação do Modelo `Produto`

    Agora, vamos criar um modelo chamado `Produto` que representará os produtos em nossa aplicação. Utilize o comando Amber para gerar o modelo e as migrações necessárias.

    commands
    # Gerar o modelo Produto
    amber generate model Produto nome:String preco:Decimal
    # Executar as migrações para criar a tabela no banco de dados
    amber db migrate

  5. Implementação da API para Produtos

    Agora, vamos criar uma controladora que irá gerenciar as operações CRUD para o modelo `Produto`.

    ProdutoController.cr
    class ProductsController < ApplicationController
      @[Action]
      def index
        @produtos = Produto.all
        render JSON::from(@produtos)
      end
    
      @[Action]
      def create
        @produto = Produto.new(@params)
        if @produto.save
          render JSON::from(@produto), status: 201
        else
          render JSON::from(@produto.errors), status: 422
        end
      end
    
      @[Action]
      def show(@id : Int32)
        @produto = Produto.first(id: @id)
        if @produto
          render JSON::from(@produto)
        else
          render status: 404
        end
      end
    
      ... # Implementar métodos de update e delete

  6. Testes Unitários

    Vamos configurar testes unitários para garantir que a nossa lógica de negócios funcione conforme o esperado. Crie uma classe de teste para o modelo `Produto`.

    Produto_spec.cr
    require "spec_helper"
    
    describe Produto do
      it "cria um novo produto" do
        produto = Produto.new(nome: "Teste", preco: 10.0)
        expect(produto.save).to be_true
      end
    
      it "não cria um produto sem nome" do
        produto = Produto.new(preco: 10.0)
        expect(produto.save).to be_false
      end
    end

  7. Executando a Aplicação e Testes

    Use o comando Amber para executar a aplicação e teste os endpoints utilizando ferramentas como Postman ou cURL.

    commands
    # Compilar e executar a aplicação
    amber run
    # Executar os testes unitários
    crystal spec

    curl_examples
    # Listar todos os produtos
    curl -X GET http://localhost:3000/products
    # Criar um novo produto
    curl -X POST -H "Content-Type: application/json" -d '{"nome":"Novo Produto", "preco":99.99}' http://localhost:3000/products

Conclusão

Neste tutorial, você aprendeu como usar Crystal e o framework Amber para criar uma aplicação web performática. Passamos pela configuração do ambiente, criação de um modelo, implementação de uma API e testes unitários. Com essas habilidades, você está pronto para explorar aplicações web mais complexas usando Crystal e Amber, aproveitando a simplicidade e eficiência que essas ferramentas oferecem para desenvolvimento ágil.

Hashtags

#Crystal #AmberFramework #DesenvolvimentoWeb #APIs #IntegraçãoContínua