Introdução

Neste tutorial, vamos explorar a interoperação do F# com o ASP.NET Core, utilizando o framework Giraffe para construir APIs eficientes e de alta performance. Giraffe é um framework de desenvolvimento web baseado em F# que permite criar aplicações web assíncronas e de fácil manutenção. O objetivo deste guia é fornecer um passo a passo detalhado que abrange desde a configuração do ambiente de desenvolvimento até a implementação de endpoints e testes unitários. Ao final deste tutorial, você terá uma compreensão sólida de como usar o Giraffe e poder usar F# para criar APIs que exploram a funcionalidade de tipos do F# e a robustez do ASP.NET Core. Este guia é ideal para desenvolvedores que desejam evoluir suas habilidades em .NET e aprender a utilizar F# em aplicações web modernas.

Etapas

  1. Configuração do Ambiente de Desenvolvimento

    Certifique-se de ter o .NET SDK instalado em sua máquina. Confira a versão instalada usando o comando `dotnet –version`. Caso não tenha o .NET instalado, você pode baixá-lo do site oficial da Microsoft.

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

  2. Criação do Projeto Giraffe

    Utilize o comando dotnet para criar um novo projeto Giraffe. Execute o comando abaixo para gerar um novo projeto com templates incluídos.

    commands
    dotnet new giraffe -n ApiGiraffe
    cd ApiGiraffe

  3. Configuração do Projeto

    Abra o arquivo `Program.fs` e adicione a configuração básica do servidor e o middleware do Giraffe. Isso permitirá que seu aplicativo receba requisições HTTP.

    Program.fs
    open System
    open Microsoft.AspNetCore.Hosting
    open Microsoft.Extensions.Hosting
    open Giraffe
    
    let webApp = set [ GET >=> route "api/greet" >=> (text "Hello from Giraffe!") ]
    
    [<EntryPoint>]
    let main argv =
        Host.CreateDefaultBuilder(argv)
            .ConfigureWebHostDefaults(fun webHost ->
                webHost.UseGiraffe(webApp))
            .Build()
            .Run()
        0

  4. Criação de um Endpoint API

    Adicione um endpoint para gerenciar dados. Neste exemplo, criaremos uma API simples para gerenciar ‘Produtos’. Crie uma nova classe `Produto.fs`.

    Produto.fs
    namespace ApiGiraffe
    
    type Produto = {
        Id: int
        Nome: string
        Preco: float
    }

  5. Implementação das Rotas CRUD

    Defina as rotas CRUD no seu arquivo `Program.fs` para gerenciar os ‘Produtos’. Adicione operações para criar, ler, atualizar e deletar produtos.

    Program.fs
    let produtos = ref []
    
    let getProdutos : HttpHandler =
        fun next ctx ->
            json !produtos next ctx
    
    let addProduto : HttpHandler =
        fun (next : HttpFunc) (ctx : HttpContext) ->
            let! produto = ctx.BindJson<Produto>()
            produtos := produto :: !produtos
            return! (text "Produto adicionado" next ctx)
    
    let webApp =
        choose [
            get >=> route "api/produtos" >=> getProdutos
            post >=> route "api/produtos" >=> addProduto
        ]

  6. Implementação de Testes Unitários

    Crie uma nova classe de testes utilizando o xUnit e o FSharp. Exemplos de testes para suas rotas de API podem ser implementados.

    ProdutoTests.fs
    module ProdutoTests
    
    open Xunit
    open Giraffe
    open Microsoft.AspNetCore.Http
    
    [<Fact>]
    let ``Test getProdutos`` () =
        // Simule um contexto de HTTP e faça a requisição para o endpoint
        let context = new DefaultHttpContext()
        let app = getProdutos
        // Adicione lógica para simular chamada ao handler

  7. Executando Aplicação e Testes

    Use o comando `dotnet run` para executar a aplicação e `dotnet test` para rodar seus testes unitários. Verifique os endpoints com ferramentas como Postman ou cURL.

    commands
    # Executar a aplicação
    dotnet run
    # Executar os testes unitários
    dotnet test
    # Buscar produtos
    curl -X GET http://localhost:5000/api/produtos

Conclusão

Neste tutorial, você aprendeu como construir uma API eficiente usando F# e Giraffe no ASP.NET Core. Desde a configuração do ambiente até a implementação de endpoints e testes, cada passo foi projetado para ajudá-lo a entender melhor como usar essas tecnologias em conjunto. A capacidade de interagir com o ASP.NET Core através do F# abre portas para novos tipos de aplicações que aproveitam o melhor dos dois mundos. Com essa base sólida, você pode expandir para adicionar autenticação, integrações com bancos de dados e muito mais.

Hashtags

#FSharp #Giraffe #APIs #DotNetCore #DesenvolvimentoWeb