Introdução

No cenário atual de desenvolvimento web, a eficiência e a rapidez na entrega de aplicações são fundamentais para o sucesso. Este tutorial tem como objetivo guiar você na criação de uma aplicação web usando F#, integrando dois frameworks poderosos: Suave e Giraffe. O Suave é uma biblioteca simples e leve para construir aplicações web assíncronas, enquanto o Giraffe oferece uma estrutura mais robusta baseada em ASP.NET Core, facilitando a construção de APIs e serviços web. Vamos explorar o ciclo completo de desenvolvimento, desde a configuração do ambiente de desenvolvimento até a implementação de testes unitários, garantindo que você possa criar e manter aplicações web de alta qualidade de forma eficaz.

Etapas

  1. Configuração do Ambiente de Desenvolvimento

    Antes de iniciar, certifique-se de ter o .NET SDK instalado em sua máquina. Você pode verificar a instalação usando o comando `dotnet –version` no terminal. Se não estiver instalado, acesse o site oficial do .NET, faça o download e siga as instruções de instalação.

    commands
    # Verificar versão do .NET SDK
    dotnet --version

  2. Criação de um Novo Projeto F# com Giraffe

    Utilize o comando abaixo para criar um novo projeto Giraffe. Este comando cria uma estrutura básica para você começar. Para isso, abra o terminal e digite: ‘dotnet new giraffe -n MeuProjetoGiraffe’. Após a criação, navegue até a pasta do projeto com ‘cd MeuProjetoGiraffe’.

    commands
    dotnet new giraffe -n MeuProjetoGiraffe
    cd MeuProjetoGiraffe

  3. Instalação das Dependências Necessárias

    Adicione as dependências do Suave e outras necessárias ao seu projeto. Execute os seguintes comandos no terminal para instalar o Suave, o Giraffe e o NUnit para testes unitários:

    commands
    dotnet add package Suave
    dotnet add package Giraffe
    dotnet add package NUnit

  4. Configuração do Servidor com Giraffe

    Neste passo, você irá configurar um servidor básico utilizando Giraffe. Abra o arquivo ‘Program.fs’ e adicione o seguinte código para configurar seu servidor e definir uma rota inicial.

    Program.fs
    open Giraffe
    
    let webApp = 
        choose [ 
            route "/" >=> (text "Olá, Mundo!") 
            route "/api/teste" >=> (text "Rota de Teste")
        ]
    
    [<EntryPoint>]
    let main argv = 
        startWebServer defaultConfig webApp
        0

  5. Adicionando Rotas Suave ao Seu Servidor

    Agora adicione a configuração do Suave para aparecer junto com Giraffe. Isso pode ser feito adaptando o código em ‘Program.fs’ que já configuramos anteriormente, adicionando um endpoint adicional utilizando Suave.

    Program.fs
    open Suave
    open Giraffe
    
    let suaveEndpoint: HttpHandler = 
        request (fun r -> 
            Successful.OK (sprintf "Suave Endpoint Respondido com %s" r.url)
        )
    
    let webApp = 
        choose [ 
            route "/" >=> (text "Olá, Mundo!")
            route "/api/teste" >=> (text "Rota de Teste")
            route "/suave" >=> suaveEndpoint
        ]

  6. Implementação da Lógica de Negócio e Serviço

    Agora, crie uma lógica de negócio simples que possa ser utilizada em seu controlador. Esta classe pode ser simplesmente um serviço que retorna algumas mensagens ou cálculos. Crie um novo arquivo e adicione seu serviço.

    MeuServico.fs
    module MeuServico
    
    let calcularAlgo x y = x + y
    
    let obterMensagem () = "Resultado do cálculo obtido com sucesso!"

  7. Utilizando o Serviço no Giraffe

    Agora você irá integrar o serviço que acabou de criar ao seu endpoint do Giraffe. Abra o ‘Program.fs’ e modifique a rota de teste para utilizar o serviço.

    Program.fs
    let resultado = MeuServico.calcularAlgo 5 10
    let webApp = 
        choose [ 
            route "/" >=> (text "Olá, Mundo!")
            route "/api/teste" >=> (text (sprintf "%s: %d" (MeuServico.obterMensagem()) resultado))
            route "/suave" >=> suaveEndpoint
        ]

  8. Implementação de Testes Unitários

    Crie um arquivo de teste para o seu serviço utilizando NUnit, levando em consideração todas as funcionalidades que você implementou anteriormente. Veja um exemplo abaixo:

    MeuServicoTests.fs
    module MeuServicoTests
    
    open NUnit.Framework
    open MeuServico
    
    [<TestFixture>]
    type MeuServicoTests() =
    
        [<Test>]
        member _.``Testando o cálculo de algo``() =
            let resultado = calcularAlgo 5 10
            Assert.AreEqual(15, resultado)
    
        [<Test>]
        member _.``Testando a mensagem do serviço``() =
            let mensagem = obterMensagem()
            Assert.AreEqual("Resultado do cálculo obtido com sucesso!", mensagem)

  9. Executando a Aplicação e Testes

    Executar a aplicação e os testes é um processo simples. Use os comandos abaixo para iniciar sua aplicação e executar seus testes:

    commands
    # Compilar e executar a aplicação
    dotnet run
    # Executar testes
    dotnet test

Conclusão

Neste tutorial, você aprendeu como integrar F# com Suave e Giraffe para desenvolver aplicações web eficientes. Desde a configuração do ambiente até a implementação do serviço e testes unitários, cada passo foi projetado para garantir que você tenha uma base sólida. Com estas ferramentas, é possível construir APIs robustas e lógicas de negócio usando a poderosa sintaxe do F#. Agora, você está pronto para explorar ainda mais e aprimorar suas aplicações web.

Hashtags

#FSharp #Giraffe #Suave #APIs #DesenvolvimentoWeb #DotNet