Introdução

No cenário atual de desenvolvimento de software, muitas empresas ainda operam com sistemas legados construídos em ferramentas como o FoxPro. Embora esses sistemas sejam funcionais, a integração com tecnologias modernas é vital para garantir competitividade e eficiência. Este tutorial guiará você na criação de uma API REST usando .NET, que permitirá que suas aplicações legadas em FoxPro interajam com sistemas modernos. Vamos cobrir desde a configuração inicial do projeto em .NET até a implementação da lógica necessária para realizar chamadas à API, possibilitando o acesso e a manipulação de dados armazenados em sistemas legados. Com exemplos práticos e um ciclo completo de desenvolvimento, você terá as ferramentas necessárias para realizar essa integração de forma eficaz.

Etapas

  1. Configuração do Ambiente de Desenvolvimento

    Certifique-se de ter o .NET SDK instalado na sua máquina. Você pode verificar a instalação através do comando `dotnet –version` no terminal. Se não tiver o SDK, faça o download no site da Microsoft.

    commands
    # Verificar se o .NET SDK está instalado
    dotnet --version

  2. Criação do Projeto .NET

    Use o comando abaixo para criar um novo projeto de API Web no .NET. O comando criará um projeto baseado nos templates padrão com suporte para API REST.

    commands
    dotnet new webapi -n FoxProIntegration

  3. Configuração do Banco de Dados

    Adicione uma conexão ao banco de dados que será utilizado para a integração com o FoxPro. Neste exemplo, usaremos um banco SQLite, que deve ser instalado via NuGet.

    commands
    dotnet add package Microsoft.EntityFrameworkCore.Sqlite

  4. Criação do Modelo de Dados

    Crie uma classe que representará os dados do FoxPro que você deseja manipular na nova API. Essa classe será usada como modelo no Entity Framework.

    Produto.cs
    using System.ComponentModel.DataAnnotations;
    
    namespace FoxProIntegration.Models {
        public class Produto {
            [Key]
            public int Id { get; set; }
            public string Nome { get; set; }
            public decimal Preco { get; set; }
        }
    }

  5. Configuração do DbContext

    Crie uma classe que herda de DbContext e configure o DbSet para o modelo. Essa classe será responsável pela comunicação com o banco de dados.

    AppDbContext.cs
    using Microsoft.EntityFrameworkCore;
    
    namespace FoxProIntegration.Data {
        public class AppDbContext : DbContext {
            public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
    
            public DbSet<Produto> Produtos { get; set; }
        }
    }

  6. Criação do Serviço para Operações CRUD

    Implemente uma classe de serviço que manipula as operações CRUD no banco de dados usando o contexto definido anteriormente.

    ProdutoService.cs
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.EntityFrameworkCore;
    
    namespace FoxProIntegration.Services {
        public class ProdutoService {
            private readonly AppDbContext _context;
    
            public ProdutoService(AppDbContext context) {
                _context = context;
            }
    
            public List<Produto> GetAll() {
                return _context.Produtos.ToList();
            }
            
            public Produto GetById(int id) {
                return _context.Produtos.Find(id);
            }
            
            public void Create(Produto produto) {
                _context.Produtos.Add(produto);
                _context.SaveChanges();
            }
            
            public void Update(Produto produto) {
                _context.Entry(produto).State = EntityState.Modified;
                _context.SaveChanges();
            }
            
            public void Delete(int id) {
                var produto = _context.Produtos.Find(id);
                _context.Produtos.Remove(produto);
                _context.SaveChanges();
            }
        }
    }

  7. Implementação do Controller da API

    Crie um controlador que expõe as rotas para a API, permitindo acesso à funcionalidade CRUD através de requisições HTTP.

    ProdutoController.cs
    using Microsoft.AspNetCore.Mvc;
    using FoxProIntegration.Models;
    using FoxProIntegration.Services;
    
    namespace FoxProIntegration.Controllers {
        [Route("api/[controller]")]
        [ApiController]
        public class ProdutoController : ControllerBase {
            private readonly ProdutoService _produtoService;
    
            public ProdutoController(ProdutoService produtoService) {
                _produtoService = produtoService;
            }
    
            [HttpGet]
            public ActionResult<List<Produto>> Get() {
                return _produtoService.GetAll();
            }
    
            [HttpGet("{id}")]
            public ActionResult<Produto> Get(int id) {
                var produto = _produtoService.GetById(id);
                if (produto == null) return NotFound();
                return produto;
            }
    
            [HttpPost]
            public ActionResult Create([FromBody] Produto produto) {
                _produtoService.Create(produto);
                return CreatedAtAction(nameof(Get), new { id = produto.Id }, produto);
            }
    
            [HttpPut("{id}")]
            public IActionResult Update(int id, [FromBody] Produto produto) {
                if (id != produto.Id) return BadRequest();
                _produtoService.Update(produto);
                return NoContent();
            }
    
            [HttpDelete("{id}")]
            public IActionResult Delete(int id) {
                _produtoService.Delete(id);
                return NoContent();
            }
        }
    }

  8. Implementação de Testes Unitários

    Utilize xUnit para criar testes unitários para a API, garantindo que as operações de serviço estão funcionando como esperado.

    ProdutoServiceTests.cs
    using System.Collections.Generic;
    using Xunit;
    using FoxProIntegration.Models;
    using FoxProIntegration.Services;
    
    namespace FoxProIntegration.Tests {
        public class ProdutoServiceTests {
            [Fact]
            public void TestGetAll() {
                var service = new ProdutoService(new TestDbContext()); // Você deve criar um contexto de teste
                var produtos = service.GetAll();
                Assert.IsType<List<Produto>>(produtos);
            }
    
            // Adicione mais testes para métodos GetById, Create, Update, Delete
        }
    }

  9. Executando a Aplicação e Testes

    Utilize os comandos do .NET para compilar e executar a aplicação. Em seguida, teste os endpoints usando ferramentas como Postman ou cURL.

    commands
    # Compilar e executar a aplicação
    dotnet run
    # Executar os testes unitários
    dotnet test

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

Conclusão

Neste tutorial, você aprendeu a integrar aplicações legadas escritas em FoxPro com tecnologias modernas utilizando .NET e APIs REST. Desde a configuração do ambiente até a implementação de um serviço web completo, você agora possui uma base sólida para realizar integrações semelhantes em projetos futuros. Essa abordagem não apenas moderniza sistemas legados, mas também torna os dados mais acessíveis e manipuláveis por outras plataformas. Sinta-se à vontade para expandir essa base e explorar novas funcionalidades.

Hashtags

#FoxPro #DotNet #APIsREST #Integração #DesenvolvimentoDeSoftware