Introdução
Neste tutorial, vamos explorar o desenvolvimento de aplicações web utilizando Crystal, uma linguagem de programação que se destaca pela sua eficiência e sintaxe semelhante ao Ruby. Focaremos em dois frameworks populares: Amber e Lucky, que permitem a criação de APIs rápidas e escaláveis. Através de exemplos práticos, você aprenderá a configurar seu ambiente de desenvolvimento, a construir suas primeiras rotas, manipular dados e implementar práticas recomendadas de desenvolvimento. Este guia é ideal para desenvolvedores que desejam expandir suas habilidades com novas tecnologias para construir aplicações eficientes e escaláveis.
Etapas
Configuração do Ambiente de Desenvolvimento
Para começar, você precisa instalar o Crystal e um dos frameworks Amber ou Lucky. O Crystal pode ser baixado do site oficial, enquanto o Amber pode ser instalado via ‘shards’, o gerenciador de pacotes do Crystal. Certifique-se de ter o ambiente configurado corretamente antes de prosseguir com o projeto.
commands# Verificar se o Crystal está instalado
crystal -v
# Instalar Amber
amber new my_app
# Ou, se preferir Lucky
lucky init my_appCriação do Projeto com Amber
Vamos criar um novo projeto usando Amber. Após instalar Amber, utilize o comando a seguir para gerar um novo aplicativo. Isso criará a estrutura básica do projeto para você trabalhar.
commandsamber new api_app
cd api_appConfiguração do Banco de Dados
No projeto Amber, edite o arquivo ‘config/database.yml’ para configurar o banco de dados que você deseja utilizar. O Amber suporta diferentes bancos de dados como PostgreSQL, MySQL e SQLite. Configure o banco de dados de acordo com suas preferências.
database.ymldevelopment: adapter: sql database: db/development.db pool: 5 timeout: 5000 production: adapter: postgresql database: my_app_production username: username password: password host: localhost
Criação do Modelo de Dados
Implemente o modelo de dados que será utilizado na aplicação. Para isso, crie um arquivo chamado ‘product.cr’ na pasta ‘src/models’ e defina a estrutura do produto. Use as anotações necessárias para cada campo.
product.crclass Product include Json::Serializable @id : Int32 @name : String @price : Float64 @[db: 'products'] column name : @name column price : @price end
Implementação do Controlador
Crie um controlador para gerenciar as operações de CRUD (Create, Read, Update, Delete) no modelo de dados. No Amber, isso é feito na pasta ‘src/controllers’. Crie um arquivo chamado ‘products_controller.cr’.
products_controller.crclass ProductsController < ApplicationController @[get: '/products'] def index products = Product.all render json: products end @[post: '/products'] def create product = Product.new(@params) if product.save render json: product, status: 201 else render json: { error: 'Product not created' }, status: 400 end end end
Executando a Aplicação
Utilize o comando abaixo para iniciar seu servidor e verifique se tudo está funcionando corretamente. Acesse http://localhost:3000/products para visualizar todos os produtos registrados.
commands# Para iniciar o servidor
amber db create
amber watchTestes Unitários
Crie testes para validar sua lógica e garantir que todas as funções CRUD estão operando corretamente. Isso é crucial para manutenção e escalabilidade da sua aplicação. Crie um arquivo de testes na pasta ‘spec’ no seu projeto.
product_spec.crrequire "spec_helper" describe Product do it "is valid with valid attributes" do product = Product.new(name: "Sample", price: 10.0) expect(product).to be_valid end it "is not valid without a name" do product = Product.new(price: 10.0) expect(product).not_to be_valid end end
Conclusão
Neste tutorial, você aprendeu a desenvolver aplicações web utilizando Crystal com os frameworks Amber e Lucky. Cobrimos desde a configuração do ambiente, passando pela criação da estrutura do projeto e do banco de dados até a implementação de rotas e testes unitários. Com estas habilidades, você está pronto para construir suas próprias APIs rápidas e escaláveis. Explore mais sobre Crystal e continue aprimorando suas habilidades de desenvolvimento.