Pular para o conteúdo principal

Criando uma API utilizando C#, Angular e Sqlite - Parte 1

Projeto

    Neste post, criaremos uma API para a comunicação entre o Frontend, feito em Angular e o Backend feito em C# e banco de dados SQLITE, utilizaremos o padrão API REST. Como ferramenta de desenvolvimento vamos utilizar o Visual Studio Code 2022.

O que é uma API

    Uma API (Application Programming Interface) é um conjunto de regras e protocolos que permitem que diferentes softwares se comuniquem e interajam uns com os outros. Ou seja, é uma interface que define como outros programas podem solicitar informações ou executar ações em um determinado sistema.
    Uma API do tipo REST utiliza o protocolo HTTP para a comunicação. Desta forma, são utilizados os métodos padrões desta comunicação GET, POST, PUT e DELETE, para realizar operações em recursos que são identificados por URLs.

Criando o projeto da API

    Para criação do projeto base da nossa API, utilizaremos uma funcionalidade de criação de projeto do .NET. Utilizando o terminal do Windows, crie uma pasta para o projeto e rode o seguinte comando:

dotnet new webapi -o ContatosApi

    Abre esse projeto no Microsoft Visual Studio.



    Como padrão, o .NET cria uma API de teste, chamada “WeatherForecast”. Neste projeto não utilizaremos essa API, então vamos excluí-la.


    Agora, precisamos criar duas novas pastas no projeto, a primeira chamada “Models” e outra pasta chamada “Data”.
    Em um projeto Entity Framework, a pasta "Models" geralmente é usada para armazenar as classes que representam as entidades do modelo de dados que são mapeadas para as tabelas do banco de dados.
    A pasta "Data", em um projeto Entity Framework é geralmente usada para armazenar as classes que gerenciam o acesso ao banco de dados. Essas classes são comumente chamadas de "Contextos".

Instalando pacotes necessários

    Neste projeto vamos utilizar o Entity Framework com o banco de dados SQLITE, por este motivo precisamos instalar alguns pacotes, podemos instalar utilizando o comandos .NET  no terminal, conforme abaixo.

dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore

    Caso você esteja utilizando o Visual Studio, podemos utilizar o Manage Packages Solution. Basta procurar os três pacotes e realizar a instalação.

Criando a representação da tabela no banco de dados, classe Model

    Nós desenvolvemos uma API que oferece um serviço de registro de contatos. Cada contato registrado inclui um nome e um número de telefone. Para armazenar essas informações, criamos uma tabela chamada Contatos, que possui três colunas: Chave Primária, Nome e Telefone. Com o uso do Entity Framework, é fácil criar a tabela simplesmente criando uma classe que represente a estrutura da tabela.
    Então na pasta model, vamos criar uma classe com o nome de "Contato" e inserir o código abaixo.

Criando o DbContext

    Agora vamos criar a classe DbContext. A classe DbContext é uma das classes mais importantes do Entity Framework, pois é usada para gerenciar o acesso ao banco de dados, sendo responsável por definir quais entidades do modelo de dados serão mapeadas para as tabelas. Isso é feito através da definição de conjuntos de entidades DbSet<T>.
    Na pasta Data, vamos criar uma nova classe chamada "ContatoContext", com o seguinte código.

String de Conexão

    Abra o arquivo “appsettings.json” e inclua o seguinte código.

Fazendo a migração e update no banco de dados

    Agora que as classes de relacionamento e configuração de banco de dados estão criadas, vamos fazer a criação do arquivo de banco de dados. No arquivo “Program.cs” inclua essas linhas de código.


    Em seguida abra o terminal Package Manager Console e rode o seguinte comando.

Add-migration Inicial


    O comando "add-migration" é muito importante para o Entity Framework, pois, é usado para criar uma nova migração no projeto. Uma migração é um conjunto de alterações no esquema do banco de dados. Com este comando o Entity Framework cria uma classe com as alterações que serão aplicadas ao banco de dados.


    Se tudo funcionar sem erros, rode o comando.

Update-database


    Esse comando fará a criação do banco de dados, agora você tem um arquivo de banco de dados para utilização.

Criando o Controller da API

    Na pasta "Controllers" crie uma nova classe chamada "ContatoControllers.cs", e insera o seguinte código.


    A API já está funcionando corretamente. É possível testar a aplicação no "Swagger" ou no "Postman" e visualizar o funcionamento do método GET. No entanto, neste momento a API ainda não é útil, já que o banco de dados está vazio e, portanto, a chamada à API retorna uma lista vazia. É preciso preencher o banco de dados com os dados para que a API comece a fornecer informações úteis.



    Fazendo a consulta, a API retorna apenas uma lista vázia.

Métodos do controller

    Os métodos que criamos é o método GET, que retorna uma lista de todas as instâncias do banco de dados. Para salvar um registro no banco precisamos criar um método do tipo POST.

Método POST

    Dentro da classe "ContatoController", logo abaixo do método GET, vamos criar um novo método.


    No inicio do método temos uma sinalização do tipo de método "[HttpPosto]", essa sinalização é importante para que o .NET entende qual o tipo deste método. Com o novo método criado, podemos rodar a aplicação novamente.


    Agora quando chamamos o método POST, podemos salvar um novo contato no banco de dados.


    E quando chamamos novamente o método GET, a API retorna o resultado com esse novo contato salvo.

Conclusão da Primeira parte

    Para esse posto não ficar gigante, dividiremos em duas partes. Na próxima parte vamos concluir o os métodos do controller, incluindo os métodos de Delete, Update e Get de um único registro, e construir o frontend utilizando o Angular, esse frontend vai consumir e salvar informações na API. A integra do projeto está no GitHub no link.





Comentários

Postagens mais visitadas deste blog

Gerenciando Dependências no Python com requirements.txt

O que é o Pip? O Pip  (Package Installer for Python) é o gerenciador de pacotes do Python. Ele permite instalar, atualizar e remover bibliotecas e dependências de forma prática, garantindo que seu ambiente esteja sempre configurado corretamente. Como gerar um arquivo requirements.txt? Quando trabalhamos em projetos Python, muitas vezes precisamos garantir que todas as dependências necessárias estejam instaladas. Para facilitar essa gestão, podemos gerar um arquivo requirements.txt que contém a lista de pacotes e versões utilizadas no ambiente. Para gerar esse arquivo, execute o seguinte comando no terminal: pip freeze > requirements.txt Esse comando captura todas as bibliotecas instaladas no ambiente e as salva no arquivo requirements.txt . Geralmente trabalhamos com um ambiente virtual, o que é uma boa prática. Como instalar dependências a partir do requirements.txt? Se você precisa configurar um novo ambiente ou compar...

Aprenda Pandas utilizando exemplos de SQL e vice e versa (select, insert, update e delete)

O que é o Pandas? O Pandas é uma biblioteca open source do Python, criada para a função de análise de dados. Suas funções incluem limpeza, tratamento e análise exploratória de dados (EDA). É uma biblioteca muito utilizada para o trabalho de Machine Learning e Data Science, porém sua utilidade vai muito além disso, sendo uma ferramenta poderosa para programadores ou profissionais que lidam com grandes conjuntos de dados. Eu utilizo muito o Pandas para conferência de relatórios e bases de dados, e considero uma ferramenta muito útil, por exemplo, para profissionais de finanças, contabilidade, etc. Funcionamento do Pandas O funcionamento do Pandas está centrado em DataFrames, que são objetos para estruturar dados, algo parecido com uma planilha. Os dados são importados para um DataFrame, e as fontes de dados pode ser de diversos tipos, por exemplo: Excel Json SQL HTML Google Sheets A liberdade que o P...

JSON e Python: Tudo o Que Você Precisa Saber para Manipular Dados

O Python possui funções embutidas (built in functions) para trabalhar com formato JSON, aqui um exemplo de como realizar uma requisição para uma API e trabalhar com o retorno em JSON. Esse código faz uma chamada à PokeApi e realiza a consulta do pokemon Pikachu. Caso a requisição retorne sucesso, o JSON é mostrado na tela. Para rodar esse código é necessário instalar o módulo " request ", com o comando " pip install request ". import requests import json url = " https://pokeapi.co/api/v2/pokemon/pikachu/" response = requests.get(url) if response.status_code == 200: data = response.json() print(json.dumps(data, indent=2)) else: print(f"Error: {response.status_code}") Trabalhando com dados aninhados No exemplo acima realizamos uma requisição para a PokeApi. O conteúdo da resposta está em um formato JSON aninhado, ou seja possui itens dent...