<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yago Peixinho</title>
    <description>The latest articles on DEV Community by Yago Peixinho (@yagopeixinho).</description>
    <link>https://dev.to/yagopeixinho</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1611071%2F871a2cbf-b39a-4d53-a19c-776c57a01368.png</url>
      <title>DEV Community: Yago Peixinho</title>
      <link>https://dev.to/yagopeixinho</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yagopeixinho"/>
    <language>en</language>
    <item>
      <title>Fundamentos para Web APIs com .NET: Uma Introdução ao Essencial com Entity Framework</title>
      <dc:creator>Yago Peixinho</dc:creator>
      <pubDate>Thu, 01 Aug 2024 04:05:26 +0000</pubDate>
      <link>https://dev.to/yagopeixinho/fundamentos-essenciais-para-web-apis-com-net-uma-introducao-ao-essencial-com-entity-framework-e-sqlite-23b6</link>
      <guid>https://dev.to/yagopeixinho/fundamentos-essenciais-para-web-apis-com-net-uma-introducao-ao-essencial-com-entity-framework-e-sqlite-23b6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Desenvolva a API DessaVezEuNaoEsqueco. No meio desse desenvolvimento, vamos mergulhar nos conceitos do .NET e API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fundamentos Essenciais para Web APIs com .NET: Uma Introdução ao essencial com Entity Framework e SQLite. Entenda os conceitos por trás de uma &lt;strong&gt;Web API&lt;/strong&gt; utilizando o .NET 8.0 e o &lt;strong&gt;Entity Framework Core&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esse artigo é destinado para todos os níveis de programadores, desde os menos experientes até os mais avançados. Nosso objetivo é compreender o que acontece por trás dos panos e nutrir alguns conhecimentos essenciais acerca de uma &lt;strong&gt;API&lt;/strong&gt; (Application Programming Interface) e seus comportamentos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sumário:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compreendendo .NET &amp;amp; C#&lt;/li&gt;
&lt;li&gt;Entendendo o que é uma API

&lt;ul&gt;
&lt;li&gt;Protocolo HTTP&lt;/li&gt;
&lt;li&gt;JSON &lt;/li&gt;
&lt;li&gt;HTTP Código de Resposta (Status Code)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Criação do projeto &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI" rel="noopener noreferrer"&gt;DessaVezEuNaoEsquecoAPI&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Sobre o Projeto&lt;/li&gt;
&lt;li&gt;Instalação

&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;Windows&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Estrutura Inicial de uma aplicação .NET 8

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Program.cs&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;appsettings.json&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Dependencies&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Entendendo as Entidades (Models)

&lt;ul&gt;
&lt;li&gt;Características de Entidades em .NET&lt;/li&gt;
&lt;li&gt;Criando Nossa Primeira Entidade&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Entendendo e o que é uma ORM &amp;amp; Entity Framework Core

&lt;ul&gt;
&lt;li&gt;Data Annotations na nossa Entidade com o Entity Framework&lt;/li&gt;
&lt;li&gt;Instalando o Entity Framework&lt;/li&gt;
&lt;li&gt;Compreendendo o que é NuGet&lt;/li&gt;
&lt;li&gt;Instalando o Pacote Nuget do Entity Framework&lt;/li&gt;
&lt;li&gt;Configurando o Entity Framework em nosso ambiente&lt;/li&gt;
&lt;li&gt;Configurar o Contexto do Banco de Dados no arquivo &lt;code&gt;Program.cs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Migração de Banco de Dados&lt;/li&gt;
&lt;li&gt;Migração com o Entity Framework&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Controllers

&lt;ul&gt;
&lt;li&gt;Criando nossos Controllers&lt;/li&gt;
&lt;li&gt;Configurando Swagger para realizarmos solicitações HTTP&lt;/li&gt;
&lt;li&gt;Criando arquivo &lt;code&gt;AtividadesController.cs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Definindo o Método &lt;strong&gt;GET&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Definindo o Método &lt;strong&gt;POST&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Definindo o Método &lt;strong&gt;GET Individual&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Vamos definir o método &lt;strong&gt;PUT&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Definindo o Método &lt;strong&gt;DELETE&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;Conclusão &amp;amp; Resumo&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  Dicas para leitura do artigo!
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pit-stop&lt;/strong&gt;&lt;br&gt;
Em momentos estratégicos do artigo, faremos pausas (geralmente durante o desenvolvimento do projeto) para exemplificar algum conceito ou revelar o que ocorre nos bastidores. Esses intervalos também são uma oportunidade para você descansar e evitar a fadiga mental.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simbologia da Tartaruga&lt;/strong&gt;&lt;br&gt;
Durante a leitura deste artigo e o desenvolvimento do projeto DessaVezEuNaoEsqueco, você encontrará o símbolo de uma tartaruga &lt;strong&gt;𓆉&lt;/strong&gt; ao lado de novos conceitos Este símbolo indica que o conceito associado ainda não foi abordado em detalhes. Certifique-se de prestar atenção a esses pontos, pois eles sinalizam que uma explicação será fornecida posteriormente.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Antes de mergulharmos fundo, você pode conferir o repositório no Github. Os códigos estão comentados, exemplificando claramente os conteúdos tratados.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/yagopeixinho" rel="noopener noreferrer"&gt;
        yagopeixinho
      &lt;/a&gt; / &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI" rel="noopener noreferrer"&gt;
        DessaVezEuNaoEsquecoAPI
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      DessaVezEuNaoEsquecoAPI, desenvolvida em .NET 8.0 &amp;amp; C#, é a sua solução definitiva para garantir que você nunca mais esqueça de nada! Seja uma lista de compras, tarefas diárias, itens para uma viagem ou qualquer outra coisa importante, essa API oferece uma interface simples e intuitiva para gerenciar suas listas e lembretes de maneira eficiente.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
      &lt;a href="https://dev.to/yagopeixinho/hello-world-mas-em-uma-web-api-com-net-8-1jp6-temp-slug-4672107?preview=3ae07a93613da5d714c9d72db668e34b0b94a669c130e8eb031de5e38e748d7e33a79771266fb7bca7ba2221ff0c653e792ff4fa43c2215645562425" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/8fcaf835cae63aab3c645d3c7579ecb8450ad24d969e1ef4acd32a4db0e47e3c/68747470733a2f2f696d672e69636f6e73382e636f6d2f636f6c6f722f313230302f6e65742d6672616d65776f726b2e6a7067" width="120px"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Uma Introdução ao Essencial com Entity Framework e SQLite.&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI#introdu%C3%A7%C3%A3o" rel="noopener noreferrer"&gt;Introdução&lt;/a&gt; •
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI#contato" rel="noopener noreferrer"&gt;Contato&lt;/a&gt; •
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI#licen%C3%A7a" rel="noopener noreferrer"&gt;Licença&lt;/a&gt;
&lt;/p&gt;

&lt;div&gt;
  &lt;a href="https://dev.to/yagopeixinho/hello-world-mas-em-uma-web-api-com-net-8-1jp6-temp-slug-4672107?preview=3ae07a93613da5d714c9d72db668e34b0b94a669c130e8eb031de5e38e748d7e33a79771266fb7bca7ba2221ff0c653e792ff4fa43c2215645562425" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/2441c5c4261c2766b7f665a7fab13f71cd647b2b68e88bb7a7533d4b089cf83f/68747470733a2f2f6d65646961322e6465762e746f2f64796e616d69632f696d6167652f77696474683d313030302c6865696768743d3432302c6669743d636f7665722c677261766974793d6175746f2c666f726d61743d6175746f2f68747470732533412532462532466465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d25324675706c6f61647325324661727469636c657325324675666835703530746b306571693579347276346e2e706e67"&gt;&lt;/a&gt;
&lt;/div&gt;



&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Introdução&lt;/h2&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Desenvolva a API DessaVezEuNaoEsqueco. No meio desse desenvolvimento, vamos mergulhar nos conceitos do .NET e API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fundamentos Essenciais para Web APIs com .NET: Uma Introdução à Propedêutica (corpo de ensinamentos introdutórios ou básicos de uma disciplina; ciência preliminar, introdução.) com Entity Framework e SQLite. Entenda os conceitos por trás de uma &lt;strong&gt;Web API&lt;/strong&gt; utilizando o .NET 8.0 e o &lt;strong&gt;Entity Framework Core&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esse artigo é destinado para todos os níveis de programadores, desde os menos experientes até os mais avançados. Nosso objetivo é compreender o que acontece por trás dos panos e nutrir alguns conhecimentos acerca de uma &lt;strong&gt;API&lt;/strong&gt; (Application Programming Interface) e seus comportamentos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sumário:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compreendendo .NET &amp;amp; C#&lt;/li&gt;
&lt;li&gt;Entendendo o que é uma API
&lt;ul&gt;
&lt;li&gt;Protocolo HTTP&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;HTTP Código de Resposta (Status Code)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Criação do projeto &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI" rel="noopener noreferrer"&gt;DessaVezEuNaoEsquecoAPI&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Sobre o Projeto&lt;/li&gt;
&lt;li&gt;Instalação
&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  Entendendo a diferença entre C# e .NET
&lt;/h2&gt;

&lt;p&gt;Comumente, vemos muitas referências a C# e .NET, mas você sabe exatamente quem é quem?&lt;/p&gt;

&lt;p&gt;A resposta é mais direta do que parece…&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;.NET&lt;/strong&gt; é uma plataforma de desenvolvimento criada pela Microsoft, projetada para suportar a criação de diversos tipos de aplicações, como aplicativos móveis, desktop e web. Ele inclui uma vasta gama de ferramentas, bibliotecas e &lt;em&gt;runtimes&lt;/em&gt;, proporcionando um ambiente robusto e a infraestrutura necessária para desenvolver, executar e gerenciar aplicações de forma eficiente.&lt;/p&gt;

&lt;p&gt;Já o &lt;strong&gt;C#&lt;/strong&gt; (pronunciado "C Sharp") é uma linguagem de programação moderna, orientada a objetos, também desenvolvida pela Microsoft. É versátil e pode ser utilizada para desenvolver uma ampla variedade de aplicações, desde websites até jogos. Originalmente, C# era uma linguagem proprietária da Microsoft. No entanto, a partir de 2014, começou a transformação para &lt;em&gt;open-source&lt;/em&gt;, permitindo que a comunidade global tivesse acesso e pudesse contribuir para a evolução e melhoria contínua da linguagem.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é uma API?
&lt;/h2&gt;

&lt;p&gt;Quando você está em um restaurante e faz um pedido ao garçom, você não precisa saber como a comida é preparada. O garçom leva seu pedido à cozinha e depois traz a comida pronta. Da mesma forma, uma API atua como intermediária entre diferentes sistemas, levando suas solicitações para o backend e retornando os dados ou serviços solicitados. Assim, APIs nos servem informações valiosas sem que precisemos nos preocupar com os processos internos.&lt;/p&gt;

&lt;p&gt;Essa flexibilidade da API é extremamente versátil. Uma mesma API pode ser disponibilizada para sistemas &lt;em&gt;Desktop&lt;/em&gt;, &lt;em&gt;Web&lt;/em&gt; e até &lt;em&gt;Mobile&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Ou seja, uma &lt;strong&gt;API&lt;/strong&gt; (Interface de Programação de Aplicações) é um conjunto de definições e protocolos que permite que diferentes softwares se comuniquem entre si. Em termos técnicos, uma API especifica os métodos e os formatos que os desenvolvedores podem usar para interagir com o sistema, facilitando a troca de informações e a execução de funcionalidades específicas sem expor a lógica interna do sistema.&lt;/p&gt;

&lt;p&gt;APIs utilizam protocolos de comunicação padrão, como &lt;strong&gt;HTTP/HTTPS 𓆉&lt;/strong&gt; , e podem trabalhar com diversos formatos de dados, como &lt;strong&gt;JSON 𓆉&lt;/strong&gt;. Elas definem endpoints, que são pontos de acesso específicos onde as solicitações podem ser feitas e as respostas podem ser recebidas. Dessa forma, APIs proporcionam uma interface segura e eficiente para acessar recursos e funcionalidades de aplicações, promovendo a integração entre diferentes sistemas e serviços.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwf6nt8wyqj5slhb4qhk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwf6nt8wyqj5slhb4qhk.png" alt="Fluxo genérico de uma API" width="608" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na imagem, percebemos que o &lt;em&gt;Client&lt;/em&gt; — dispositivos como computador, notebook ou celular — são nosso pronto de entrada. Quando acessamos, por exemplo, o Instagram, realizamos uma requisição para a API responsável (ênfase no segundo bloco da imagem), que se comunicará com o servidor para nos retornar alguma informação. Esse retorno será realizado em JSON, XML ou qualquer outro formato de resposta. Essa requisição é realizada via protocolo HTTP e a resposta é interpretada pela linguagem de programação responsável pela geração de interfaces (UI).&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é Protocolo HTTP?
&lt;/h2&gt;

&lt;p&gt;O HTTP (Hypertext Transfer Protocol) é um protocolo de comunicação fundamental na web, utilizado para a troca de informações entre clientes e servidores. Ele é a base para a transmissão de dados na web e permite que navegadores, servidores e outros aplicativos web se comuniquem.&lt;/p&gt;

&lt;p&gt;O protoclo HTTP define vários métodos de requisição que especificam a ação desejada.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GET: Solicita dados de um recurso.&lt;/li&gt;
&lt;li&gt;POST: Envia dados para um servidor, geralmente para criar ou atualizar um recurso.&lt;/li&gt;
&lt;li&gt;PUT: Substitui ou atualiza um recurso existente.&lt;/li&gt;
&lt;li&gt;DELETE: Remove um recurso.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quando um cliente faz uma solicitação HTTP, ele envia um "request" (requisição) que inclui o método HTTP, a URL do recurso, e os cabeçalhos necessários. O servidor responde com um "response" (resposta) que inclui um &lt;strong&gt;código de status HTTP 𓆉&lt;/strong&gt;, cabeçalhos e, se aplicável, o corpo da resposta com os dados solicitados.&lt;/p&gt;

&lt;p&gt;Essa resposta, como dito anteriormente, pode possuir qualquer formato. Trataremos nesse artigo o formato JSON.&lt;/p&gt;

&lt;h2&gt;
  
  
  JSON
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;JSON (JavaScript Object Notation)&lt;/strong&gt; é um formato leve para troca de dados, amplamente utilizado para enviar e receber informações entre clientes e servidores. Em termos técnicos, JSON é uma forma estruturada de representar dados em texto, que é fácil de ler e escrever para humanos e simples de analisar e gerar para máquinas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"nome"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"João"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"idade"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"casado"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"endereços"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rua"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rua A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"cidade"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Cidade X"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rua"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rua B"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"cidade"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Cidade Y"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;JSON usa uma sintaxe baseada em pares chave-valor e arrays, o que o torna muito eficiente para representar dados estruturados. Os dados são organizados em objetos e arrays, permitindo uma representação clara e direta das informações.&lt;/p&gt;
&lt;h2&gt;
  
  
  HTTP Código de Resposta (Status Code)
&lt;/h2&gt;

&lt;p&gt;Quando recebemos uma resposta de uma API, precisamos enviar uma resposta para o cliente sobre o status da requisição.&lt;/p&gt;

&lt;p&gt;O status code é de extrema importância para a resposta de uma API. É a partir dele que o cliente (seja ele um aplicativo web, mobile ou desktop) lidará com a sua interação em suas interfaces. Esses queridos códigos possuem a responsabilidade de comunicar a resposta a partir de códigos que variam de &lt;em&gt;100&lt;/em&gt; a &lt;em&gt;599&lt;/em&gt;. Alguns códigos são extremamente conhecidos, até por leigos que não entendem de programação, como, por exemplo, o &lt;strong&gt;erro 404 Not Found.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alguns dos códigos de respostas mais conhecidos são:&lt;/p&gt;

&lt;p&gt;ⓘ &lt;strong&gt;200 OK:&lt;/strong&gt; A requisição foi bem-sucedida. Esta é a resposta padrão para requisições HTTP bem-sucedidas.&lt;/p&gt;

&lt;p&gt;ⓘ &lt;strong&gt;201 Created:&lt;/strong&gt; A requisição foi bem-sucedida e um novo recurso foi criado como resultado. Esta é a resposta enviada após uma requisição POST.&lt;/p&gt;

&lt;p&gt;ⓘ &lt;strong&gt;204 No Content:&lt;/strong&gt; A requisição foi bem-sucedida, mas não há conteúdo para enviar de volta. É comum em respostas para requisições DELETE.&lt;/p&gt;

&lt;p&gt;ⓘ &lt;strong&gt;400 Bad Request:&lt;/strong&gt; A requisição não pôde ser processada devido a um erro no cliente, como parâmetros inválidos ou dados incorretos.&lt;/p&gt;

&lt;p&gt;ⓘ &lt;strong&gt;401 Unauthorized:&lt;/strong&gt; A requisição requer autenticação do usuário. Esta resposta é enviada quando a autenticação é necessária e falhou ou ainda não foi fornecida.&lt;/p&gt;

&lt;p&gt;ⓘ &lt;strong&gt;404 Not Found:&lt;/strong&gt; O servidor não encontrou o recurso solicitado. Este código é frequentemente retornado quando o recurso não existe ou a URL está incorreta.&lt;/p&gt;

&lt;p&gt;ⓘ &lt;strong&gt;500 Internal Server Error:&lt;/strong&gt; O servidor encontrou uma situação que não sabe como lidar. É uma resposta genérica para quando um erro inesperado ocorre no servidor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt; caso tenha interesse em conhecer mais códigos do Status Code.&lt;/p&gt;
&lt;h2&gt;
  
  
  Desenvolvendo a API &lt;strong&gt;DessaVezEuNãoEsqueço&lt;/strong&gt;
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/yagopeixinho" rel="noopener noreferrer"&gt;
        yagopeixinho
      &lt;/a&gt; / &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI" rel="noopener noreferrer"&gt;
        DessaVezEuNaoEsquecoAPI
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      DessaVezEuNaoEsquecoAPI, desenvolvida em .NET 8.0 &amp;amp; C#, é a sua solução definitiva para garantir que você nunca mais esqueça de nada! Seja uma lista de compras, tarefas diárias, itens para uma viagem ou qualquer outra coisa importante, essa API oferece uma interface simples e intuitiva para gerenciar suas listas e lembretes de maneira eficiente.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
      &lt;a href="https://dev.to/yagopeixinho/hello-world-mas-em-uma-web-api-com-net-8-1jp6-temp-slug-4672107?preview=3ae07a93613da5d714c9d72db668e34b0b94a669c130e8eb031de5e38e748d7e33a79771266fb7bca7ba2221ff0c653e792ff4fa43c2215645562425" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/8fcaf835cae63aab3c645d3c7579ecb8450ad24d969e1ef4acd32a4db0e47e3c/68747470733a2f2f696d672e69636f6e73382e636f6d2f636f6c6f722f313230302f6e65742d6672616d65776f726b2e6a7067" width="120px"&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Uma Introdução ao Essencial com Entity Framework e SQLite.&lt;/h4&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI#introdu%C3%A7%C3%A3o" rel="noopener noreferrer"&gt;Introdução&lt;/a&gt; •
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI#contato" rel="noopener noreferrer"&gt;Contato&lt;/a&gt; •
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI#licen%C3%A7a" rel="noopener noreferrer"&gt;Licença&lt;/a&gt;
&lt;/p&gt;

&lt;div&gt;
  &lt;a href="https://dev.to/yagopeixinho/hello-world-mas-em-uma-web-api-com-net-8-1jp6-temp-slug-4672107?preview=3ae07a93613da5d714c9d72db668e34b0b94a669c130e8eb031de5e38e748d7e33a79771266fb7bca7ba2221ff0c653e792ff4fa43c2215645562425" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/2441c5c4261c2766b7f665a7fab13f71cd647b2b68e88bb7a7533d4b089cf83f/68747470733a2f2f6d65646961322e6465762e746f2f64796e616d69632f696d6167652f77696474683d313030302c6865696768743d3432302c6669743d636f7665722c677261766974793d6175746f2c666f726d61743d6175746f2f68747470732533412532462532466465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d25324675706c6f61647325324661727469636c657325324675666835703530746b306571693579347276346e2e706e67"&gt;&lt;/a&gt;
&lt;/div&gt;



&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Introdução&lt;/h2&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Desenvolva a API DessaVezEuNaoEsqueco. No meio desse desenvolvimento, vamos mergulhar nos conceitos do .NET e API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fundamentos Essenciais para Web APIs com .NET: Uma Introdução à Propedêutica (corpo de ensinamentos introdutórios ou básicos de uma disciplina; ciência preliminar, introdução.) com Entity Framework e SQLite. Entenda os conceitos por trás de uma &lt;strong&gt;Web API&lt;/strong&gt; utilizando o .NET 8.0 e o &lt;strong&gt;Entity Framework Core&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esse artigo é destinado para todos os níveis de programadores, desde os menos experientes até os mais avançados. Nosso objetivo é compreender o que acontece por trás dos panos e nutrir alguns conhecimentos acerca de uma &lt;strong&gt;API&lt;/strong&gt; (Application Programming Interface) e seus comportamentos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sumário:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compreendendo .NET &amp;amp; C#&lt;/li&gt;
&lt;li&gt;Entendendo o que é uma API
&lt;ul&gt;
&lt;li&gt;Protocolo HTTP&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;HTTP Código de Resposta (Status Code)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Criação do projeto &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI" rel="noopener noreferrer"&gt;DessaVezEuNaoEsquecoAPI&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Sobre o Projeto&lt;/li&gt;
&lt;li&gt;Instalação
&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  Sobre o Projeto
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DessaVezEuNaoEsquecoAPI&lt;/strong&gt; é uma solução desenvolvida em .NET 8.0 e C# para garantir que você nunca mais esqueça de nada. Se você precisa gerenciar uma lista de compras, tarefas diárias, itens para uma viagem ou qualquer outra coisa importante, esta API oferece uma interface simples e intuitiva para manter suas listas e lembretes organizados de maneira eficiente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O objetivo deste projeto é explorar conceitos fundamentais do .NET e C#, além de suas principais dependências. Nosso foco principal é entender os princípios básicos e iniciais do .NET e suas responsabilidades.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Embora seja um projeto de nível iniciante, ele é excelente para desenvolvedores que desejam aprender os fundamentos do .NET ou se familiarizar com o desenvolvimento de aplicações nesta plataforma.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Vamos instalar as nossas ferramentas necessárias para termos o ambiente perfeito.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Ubuntu
&lt;/h2&gt;

&lt;p&gt;Perfeito! Então você é adepto ao clube do penguim!&lt;/p&gt;

&lt;p&gt;Organize seu ambiente e vamos começar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tecnologias utilizadas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;.NET&lt;/li&gt;
&lt;li&gt;Entity Framework Core&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;li&gt;Visualizador de Banco de dados da sua preferência (recomendo o DBrowser pelo forte suporte ao SQLite)&lt;/li&gt;
&lt;li&gt;Um IDE de sua preferência (Recomendo o JetBrains Rider ou Visual Studio Code)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Banco de dados
&lt;/h3&gt;

&lt;p&gt;Utilizaremos o &lt;strong&gt;SQLite&lt;/strong&gt; como o banco de dados principal. O SQLite é um banco de dados local que armazena informações em um único arquivo em sua própria máquina. Esta escolha visa simplificar a visualização e o desenvolvimento inicial da &lt;em&gt;API&lt;/em&gt;, reduzindo o nível de abstração e tornando o processo mais produtivo. Ao optar pelo SQLite, evitamos a necessidade de instalações complexas e desnecessárias, o que facilita a configuração e o gerenciamento do banco de dados durante as fases iniciais do projeto.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vamos começar instalando nossas ferramentas no Ubuntu?
&lt;/h3&gt;

&lt;p&gt;1 - &lt;strong&gt;Atualize os pacotes do sistema&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
  &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;2 - &lt;strong&gt;Instale o .NET SDK:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  wget https://packages.microsoft.com/config/ubuntu/20.04/packages-      
  microsoft-prod.deb &lt;span class="nt"&gt;-O&lt;/span&gt; packages-microsoft-prod.deb
  &lt;span class="nb"&gt;sudo &lt;/span&gt;dpkg &lt;span class="nt"&gt;-i&lt;/span&gt; packages-microsoft-prod.deb
  &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
  &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; dotnet-sdk-8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;3 -  &lt;strong&gt;Instale o SQLite:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; sqlite3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;4 - &lt;strong&gt;Instale o DB Browser for SQLite:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; sqlitebrowser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;5 - &lt;strong&gt;Instale o JetBrains Rider ou a IDE de sua preferência:&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Hello, .NET no Ubuntu
&lt;/h3&gt;

&lt;p&gt;Com todas as tecnologias instaladas em sua máquina, estamos prontos para por a mão na massa e dar iniciao oo projeto Dessa Vez Eu não Esqueço.&lt;/p&gt;

&lt;p&gt;1 - &lt;strong&gt;Com o SDK instalado, você pode criar um novo projeto Web API usando o comando:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet new webapi &lt;span class="nt"&gt;-n&lt;/span&gt; DessaVezEuNaoEsquecoAPI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;2 - &lt;strong&gt;Restaurar pacotes e construir o projeto:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet restore
dotnet build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;3 - &lt;strong&gt;Executar  projeto e verificar se está tudo corretamente&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;O projeto será iniciado, e você pode acessar a &lt;strong&gt;API&lt;/strong&gt; em &lt;code&gt;http://localhost:5000&lt;/code&gt; (ou o URL exibido no terminal).&lt;/p&gt;
&lt;h2&gt;
  
  
  Windows
&lt;/h2&gt;

&lt;p&gt;Perfeito! Então você é um entusiasta do Windows!&lt;/p&gt;

&lt;p&gt;Organize seu ambiente e vamos começar.&lt;/p&gt;
&lt;h3&gt;
  
  
  Tecnologias utilizadas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;.NET&lt;/li&gt;
&lt;li&gt;Entity Framework Core&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;li&gt;Visualizador de Banco de dados da sua preferência (recomendo o DB Browser pelo forte suporte ao SQLite)&lt;/li&gt;
&lt;li&gt;Uma IDE de sua preferência (Recomendo o Visual Studio Community ou Visual Studio Code)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Banco de dados
&lt;/h3&gt;

&lt;p&gt;Utilizaremos o &lt;strong&gt;SQLite&lt;/strong&gt; como o banco de dados principal. O SQLite é um banco de dados local que armazena informações em um único arquivo em sua própria máquina. Esta escolha visa simplificar a visualização e o desenvolvimento inicial da &lt;em&gt;API&lt;/em&gt;, reduzindo o nível de abstração e tornando o processo mais produtivo. Ao optar pelo SQLite, evitamos a necessidade de instalações complexas e desnecessárias, o que facilita a configuração e o gerenciamento do banco de dados durante as fases iniciais do projeto.&lt;/p&gt;
&lt;h3&gt;
  
  
  Vamos começar instalando nossas ferramentas no Windows?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Atualize o sistema&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verifique se há atualizações disponíveis para o Windows e instale-as.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Instale o .NET SDK:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acesse a &lt;a href="https://dotnet.microsoft.com/download" rel="noopener noreferrer"&gt;página de downloads do .NET&lt;/a&gt; e baixe o instalador do SDK para a versão desejada (por exemplo, .NET 8).&lt;/li&gt;
&lt;li&gt;Execute o instalador e siga as instruções para concluir a instalação.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Instale o DB Browser:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acesse a &lt;a href="https://sqlitebrowser.org/dl/" rel="noopener noreferrer"&gt;página de downloads do DB Browser for SQLite&lt;/a&gt; e baixe o instalador para Windows.&lt;/li&gt;
&lt;li&gt;Execute o instalador e siga as instruções para concluir a instalação.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Instale o Visual Studio Community ou a IDE de sua preferência:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Baixe e instale o &lt;a href="https://visualstudio.microsoft.com/vs/community/" rel="noopener noreferrer"&gt;Visual Studio Community&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Hello, .NET no Windows
&lt;/h3&gt;

&lt;p&gt;Com todas as tecnologias instaladas em sua máquina, estamos prontos para colocar a mão na massa e dar início ao projeto Dessa Vez Eu Não Esqueço.&lt;/p&gt;

&lt;p&gt;1 - &lt;strong&gt;Crie um novo projeto Web API usando o SDK:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Abra o Prompt de Comando ou o PowerShell e execute o comando:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet new webapi &lt;span class="nt"&gt;-n&lt;/span&gt; DessaVezEuNaoEsquecoAPI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;2 - &lt;strong&gt;Restaurar pacotes e construir o projeto:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navegue até o diretório do projeto
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;DessaVezEuNaoEsquecoAPI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Rode os comandos:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet restore
dotnet build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;3 - &lt;strong&gt;Executar o projeto e verificar se está tudo correto:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rode o comando:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;O projeto será iniciado, e você pode acessar a &lt;strong&gt;API&lt;/strong&gt; em &lt;code&gt;http://localhost:5000&lt;/code&gt; (ou o URL exibido no terminal).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbx8axjzwzc3g04mwvgsu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbx8axjzwzc3g04mwvgsu.png" alt="Pit-Stop sobre estrutura inicial do projeto." width="800" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;☕︎ Ao inicializar o projeto, vamos nos deparar em uma aplicação típica em .NET core para desenvolvimento web. Essa estrutura de arquivos iniciais pode variar a depender dano forma que você criou a sua aplicação.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Entendendo os arquivos iniciais do .NET Core
&lt;/h2&gt;

&lt;p&gt;Ao abrir o seu editor de texto, você provavelmente se deparofu com uma sequência de arquivos (os quais você não faz a mínima ideia, caso seja seus primeirso contatos com o .NET).&lt;/p&gt;

&lt;p&gt;Nosso objetivo antes de colocar a mão no código é compreender as responsabilidade de cada arquivo e entender suas respectivas funcionalidades.&lt;/p&gt;
&lt;h3&gt;
  
  
  Program.cs
&lt;/h3&gt;

&lt;p&gt;O arquivo &lt;code&gt;Program.cs&lt;/code&gt; é o arquivo de entrada da aplicação principal e é extremamente comum em aplicações web com o .NET.&lt;/p&gt;

&lt;p&gt;Este arquivo é essencial para configurar a infraestrutura básica da sua aplicação e gerenciar como as requisições HTTP são tratadas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ponto de Entrada&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  O arquivo &lt;code&gt;Program.cs&lt;/code&gt; é o ponto de entrada da aplicação. Nesse arquivo o &lt;em&gt;Host&lt;/em&gt; da aplicação é configurado e construído.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Modelo Simplificado&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A partir do .NET 6, o modelo de hospedagem foi simplificado, que combina o arquivo &lt;code&gt;Startup.cs&lt;/code&gt; e &lt;code&gt;Program.cs&lt;/code&gt; em um unico arquivo — geralmente o &lt;code&gt;Program.cs&lt;/code&gt; &lt;em&gt;(Ressalto isto, pois, em algumas aplicações com versões inferiores ao .NET 6, não existirá o arquivo &lt;code&gt;Startup.cs&lt;/code&gt;)&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configurações, Middlewares e Endpoints&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  No &lt;code&gt;Program.cs&lt;/code&gt;, você configura serviços, middlewares e endpoints. Serviços são adicionados ao contêiner de dependências, middlewares.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  appsettings.json
&lt;/h3&gt;

&lt;p&gt;O &lt;code&gt;appsettings.json&lt;/code&gt; é o arquivo de configuração utilizado para armazenar configurações da aplicação, como strings de conexão, configurações de logging, e outros parâmetros de configuração.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pode haver vários arquivos de configuração para diferentes ambientes (ex: &lt;code&gt;appsettings.Development.json&lt;/code&gt;, &lt;code&gt;appsettings.Production.json&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Dependencies
&lt;/h3&gt;

&lt;p&gt;De forma objetiva, esse é o arquivo que contém a nossa lista de dependências e pacotes &lt;strong&gt;NuGet 𓆉&lt;/strong&gt; que o projeto utiliza.&lt;/p&gt;
&lt;h2&gt;
  
  
  Entendendo as Entidades (Models)
&lt;/h2&gt;

&lt;p&gt;Se você já possui alguma experiência prévia, é provável que já tenha ouvido muito o termo "Entidade". Se não, não se preocupe. Entidades não são seres espirituais nem nada que vá nos fazer mal (apesar de algumas controvérsias). :D&lt;/p&gt;

&lt;p&gt;Em &lt;strong&gt;.NET&lt;/strong&gt;, especialmente no contexto do &lt;strong&gt;Entity Framework 𓆉︎&lt;/strong&gt; e outros &lt;strong&gt;ORMs 𓆉︎&lt;/strong&gt; (Object-Relational Mappers), as entidades referem-se às classes que representam os objetos principais do seu domínio de aplicação. Elas são usadas para modelar e interagir com os dados armazenados em um banco de dados relacional.&lt;/p&gt;

&lt;p&gt;Basicamente o &lt;strong&gt;Entity Framework&lt;/strong&gt; converte nossas classes em tabelas no banco de dados. Cada entidade corresponde a uma tabela. Por exemplo, se criarmos a classe "User", o Entity Framework transformará essa classe em uma tabela chamada "Users" no banco de dados.&lt;/p&gt;
&lt;h3&gt;
  
  
  Características de Entidades em .NET
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Representação de Objetos de Domínio&lt;/strong&gt;: As entidades são tipicamente usadas para representar objetos de negócio ou entidades do mundo real, como um Usuário, Produto, Pedido, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mapeamento para o Banco de Dados&lt;/strong&gt;: As propriedades das entidades geralmente correspondem aos campos das tabelas do banco de dados. O ORM, como o Entity Framework, mapeia automaticamente essas entidades para as tabelas do banco de dados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Comportamentos e Regras de Negócio&lt;/strong&gt;: Além de simplesmente armazenar dados, as entidades também podem incluir lógica de validação, regras de negócio e métodos que operam sobre esses dados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Relacionamentos&lt;/strong&gt;: Entidades podem ter relacionamentos uns com os outros (por exemplo, um &lt;em&gt;Pedido&lt;/em&gt; pode estar associado a vários &lt;em&gt;Itens de Pedido&lt;/em&gt;), o que é definido nas classes de entidade através de propriedades de navegação.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Embora as entidades sejam frequentemente associadas ao uso do Entity Framework ou outras ORMs para o mapeamento de banco de dados relacionais, elas não são usos exclusivos dessas ferramentas. &lt;/p&gt;

&lt;p&gt;Entidades em .NET, no contexto mais amplo do desenvolvimento de software, são simplesmente classes que representam objetos de domínio ou entidade de negócio.&lt;/p&gt;

&lt;p&gt;Agora que você sabe o que é uma entidade, vamos desenvolver a entidade do nosso projeto?&lt;/p&gt;
&lt;h3&gt;
  
  
  Criando Nossa Primeira Entidade
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inserindo diretório e classe&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  No diretório da nossa aplicação, insira uma nova pasta chamada &lt;code&gt;Models&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  Dentro dessa pasta, insira um outro diretório chamado &lt;code&gt;Atividade.cs&lt;/code&gt; com a seguinte codificação.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;DessaVezEuNaoEsquecoAPI.Models&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.ComponentModel.DataAnnotations&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Atividade&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Propriedade que representa o identificador único da atividade&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Propriedade que representa o nome da atividade.&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;required&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Nome&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// Nome da nossa atividade que não deve ser esquecida.&lt;/span&gt;

    &lt;span class="c1"&gt;// Propriedade que representa a data em que a atividade deve ser realizada&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt; &lt;span class="n"&gt;Data&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// Data de realizar a atividade.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Arquivo Atividade.cs&lt;/strong&gt; em &lt;em&gt;Model/Atividade.cs&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqewrkq2vusjkhqtm78u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqewrkq2vusjkhqtm78u.png" alt="Código completo do bloco de Atividade" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI/blob/main/Models/Atividade.cs" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt; para ver no Github
&lt;/h4&gt;

&lt;p&gt;Inserimos nossa primeira Entidade no sistema. E agora? Como usamos? Pra que utilizamos? Afinal, qual o impacto que ela terá no sistema?&lt;/p&gt;

&lt;p&gt;Para responder essas perguntas, precisamos entender sobre o &lt;strong&gt;Entity Framework&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Entendendo e o que é uma ORM &amp;amp; Entity Framework Core
&lt;/h2&gt;

&lt;p&gt;O Entity Framework (EF) em .NET é uma ORM (Object-Relation Mapping), que faciltia o mapeamento de estrutura de dados em um banco de dados relacionado para objetos em código .NET. Opaaaaaa. Talvez tenha ficado um pouco complexo! Vamos simplificar?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Uma ORM é como um “tradutor” que ajuda o computador a entender duas coisas diferentes que não falam a mesma lingua.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quando criamos um programa que precisa armanezar e recuperar informações de um banco de dados, geralmente utilizamos linguagem de programação como &lt;em&gt;C#&lt;/em&gt;, &lt;em&gt;Java&lt;/em&gt; ou &lt;em&gt;Python&lt;/em&gt;. Os bancos de dados, por outro lado, armazenam esses dados de uma forma diferente, geralmente em tabelas e colunas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A ORM atua como ponte entre dois mundos.&lt;/strong&gt; Ela permite que os programadores usem objetos (como classes em C#) para representar dados do banco de dados. Em vez de lidar diretamente com comando SQL (linguagem utilizada para trabalhar com banco de dados), a ORM traduz automaticamente todas as operações do programa em comandos SQL que o banco de dados entende. É como um assistente que traduz as instruções que você dá em um idioma (objetos do seu programa) para outro idioma (comandos SQL do banco de dados) e vice-versa, tornando o desenvolvimento de software mais eficiente e menos propenso a erros.&lt;/p&gt;

&lt;p&gt;O Entity Framework é uma ORM que usamos para trabalhar com no ecossistema .NET. Diferentes tecnologias possuem diferentes ORMS com especificações prórpias e diferentes tecnologias possuem mais de uma ORM a sua disposição.&lt;/p&gt;
&lt;h3&gt;
  
  
  Algumas ORMs para diferentes linguagens
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; Python: SQLAlchemy, Django ORM (para aplicações Django), Peewee, PonyORM.&lt;/li&gt;
&lt;li&gt;  Java: Hibernate (provavelmente o mais conhecido), EclipseLink, MyBatis, jOOQ (focado em SQL fluent).&lt;/li&gt;
&lt;li&gt;  Node.js: Sequelize (para bancos de dados relacionais), Mongoose (para bancos de dados NoSQL como MongoDB), TypeORM (também suporta TypeScript).&lt;/li&gt;
&lt;li&gt;  C#: Entity Framework (EF Core para .NET Core e .NET 5+), Dapper (mais orientado a SQL puro), NHibernate (inspirado no Hibernate para Java).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Data Annotations na nossa Entidade com o Entity Framework
&lt;/h3&gt;

&lt;p&gt;O Data Annotations são atributos que você pode aplicar a propriedades de classes no Entity Framework para configurar o mapeamento de banco de dados e o comportamento de validação. Eles são parte do &lt;strong&gt;namespace 𓆉&lt;/strong&gt; System.ComponentModel.DataAnnotations e oferecem uma maneira fácil e declarativa de definir metadados diretamente no código.&lt;/p&gt;

&lt;p&gt;Agora que entendemos a necessidade da nossa ORM (EF), vamos mapear nossa Entidade &lt;code&gt;Atividade&lt;/code&gt; para receber algumas propriedades.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inserindo Data Annotations na nossa Entidade&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Vamos acessar o arquivo &lt;code&gt;Atividade.cs&lt;/code&gt; e inserir os seguintes atributos acima da nossa propriedade &lt;code&gt;Nome&lt;/code&gt;.

&lt;ul&gt;
&lt;li&gt;StringLength(50)
&lt;/li&gt;
&lt;li&gt; Required
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;DessaVezEuNaoEsquecoAPI.Models&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.ComponentModel.DataAnnotations&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Atividade&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Propriedade que representa o identificador único da atividade&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Propriedade que representa o nome da atividade.&lt;/span&gt;
    &lt;span class="c1"&gt;// Atributo StringLength define um tamanho máximo de 50 caracteres.&lt;/span&gt;
    &lt;span class="c1"&gt;// Atributo Required indica que o campo é obrigatório.&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;StringLength&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Required&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;required&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Nome&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// Nome da nossa atividade que            não deve ser esquecida.&lt;/span&gt;

    &lt;span class="c1"&gt;// Propriedade que representa a data em que a atividade deve ser realizada&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt; &lt;span class="n"&gt;Data&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// Data de realizar a atividade.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Arquivo Atividade.cs com incrementação do Data Annotation:&lt;/strong&gt; &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5kecvhnvujuhdjsnet6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5kecvhnvujuhdjsnet6.png" alt="Imagem do bloco de código após implementação do Data Annotation" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI/blob/main/Models/Atividade.cs" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt; para ver no Github.
&lt;/h4&gt;

&lt;p&gt;No código fornecido, você pode perceber que insiremos as propriedades &lt;code&gt;[Required]&lt;/code&gt; e &lt;code&gt;StringLength(50)&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Como o nome exemplifica, o &lt;code&gt;Required&lt;/code&gt; determina que um campo é obrigatório e o &lt;code&gt;StringLength&lt;/code&gt; determina a quantidade de caracteres que a propriedade deve ter. &lt;/p&gt;

&lt;p&gt;Essas características dos &lt;strong&gt;Data Annotations&lt;/strong&gt; podem ser utilizadas para definir restrições diretamente nas entidades. Ajudam a manter o código limpo e legível, enquanto definem comportamentos específicos para suas propriedades no contexto do &lt;strong&gt;Entity Framework&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Existe uma GAAAAAAMA de possibilidades de utilizar o Data Annotations. &lt;a href="https://learn.microsoft.com/pt-br/dotnet/api/system.componentmodel.dataannotations?view=net-8.0" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt; para se aprofundar nesse universo.&lt;/p&gt;
&lt;h3&gt;
  
  
  Instalando o Entity Framework
&lt;/h3&gt;

&lt;p&gt;Agora que sabemos o que é uma &lt;strong&gt;ORM&lt;/strong&gt; e a responsabilidade do &lt;strong&gt;Entity Framework&lt;/strong&gt; em uma aplicação .NET, vamos, finalmente, inserir o Entity Framework no nosso projeto para que consigamos realizar manipulações no nosso banco de dados.&lt;/p&gt;
&lt;h4&gt;
  
  
  Compreendendo o que é NuGet
&lt;/h4&gt;

&lt;p&gt;Os pacotes NuGet são unidades de distribuição de código para o ecossistema .NET. São usados para empacotar bibliotecas, frameworks e ferramentas que podem ser facilmente intregados em projetos .NET.&lt;/p&gt;

&lt;p&gt;Cada pacote NuGet contém arquivos necessários para sua instalação e utilização. A principal vantagem é que simplificam o gerenciamento de dependências e permitem que os desenvolvedores compartilhem e reutilizem código de forma eficiente dentro do projeto.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O NuGet é similar ao &lt;em&gt;npm&lt;/em&gt; do Node e ao &lt;em&gt;pip&lt;/em&gt; do Python.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para utilizarmos o Entity Framework com o SQLite em uma aplicação .NET, vamos realizar a sua implementação no nosso &lt;strong&gt;Pacote NuGet.&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Instalando o Pacote Nuget do Entity Framework
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Instalação dos Pacotes NuGet

&lt;ul&gt;
&lt;li&gt;Abra o Console de Gerenciador de Pacotes NuGet na sua respectiva IDE.&lt;/li&gt;
&lt;li&gt;Execute os seguintes comandos para instalar os pacotes necessários:
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Install-Package Microsoft.EntityFrameworkCore.Design
Install-Package Microsoft.EntityFrameworkCore.Sqlite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;Esse comando pode variar a depender do seu terminal, sistema operacional ou IDE. Pelo visual Studio Code, você pode utilizar o comando &lt;code&gt;dotnet add package Microsoft.EntityFrameworkCore.Sqlite&lt;/code&gt; e &lt;code&gt;dotnet add package Microsoft.EntityFrameworkCore.Design&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ao rodar esse comando, sua aplicação .NET já está pronta para conseguirmos utilizar o Entity Framework.&lt;/p&gt;
&lt;h4&gt;
  
  
  Configurando o Entity Framework em nosso ambiente
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Configurações do Contexto do Banco de Dados. 

&lt;ul&gt;
&lt;li&gt;Crie uma classe que herde &lt;code&gt;DbContext&lt;/code&gt; para representar o seu banco de dados e configurar as entidades.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Lembra que falamos disso um pouco mais cedo quando explicamos ORM? Nesse momento em que vamos inserir o DbContext e as nossas entidades (Models) vão começar a representar itens no nosso banco de dados.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vamos criar um diretório chamado &lt;code&gt;Data&lt;/code&gt; na raiz do nosso projeto, o qual, vamos inserir um arquivo chamado &lt;code&gt;DessaVezEuNaoEsquecoContext.cs&lt;/code&gt; dentro dele. Esse arquivo é responsável por essa nossa classe que fará a conexão com o nosos Entity Framework.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt;  &lt;span class="nn"&gt;DessaVezEuNaoEsquecoAPI.Models&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Importa o namespace onde o modelo Atividade está definido.&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt;  &lt;span class="nn"&gt;Microsoft.EntityFrameworkCore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Importa o namespace necessário para usar o Entity Framework Core.&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt;  &lt;span class="nn"&gt;DessaVezEuNaoEsquecoAPI.Data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt;  &lt;span class="k"&gt;class&lt;/span&gt;  &lt;span class="nc"&gt;DessaVezEuNaoEsquecoContext&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DbContext&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Construtor que aceita opções de configuração para o contexto e passa essas opções para o construtor base da classe DbContext.&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;DessaVezEuNaoEsquecoContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DbContextOptions&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;DessaVezEuNaoEsquecoContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;base&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Propriedade DbSet que representa a coleção de Atividades na base de dados.&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt;  &lt;span class="n"&gt;DbSet&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Atividade&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Atividades&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Arquivo DessaVezEuNaoEsquecoContext.cs&lt;/strong&gt; em &lt;em&gt;Data/DessaVezEuNaoEsquecoContext.cs&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6c2evq9grkjm35lqewfy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6c2evq9grkjm35lqewfy.png" alt="Bloco de código com a imagem do Contexto da Aplicação" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI/blob/main/Data/DessaVezEuNaoEsquecoContext.cs" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt; para ver no Github.
&lt;/h4&gt;

&lt;p&gt;Com esse código inserido, o nosso contexto já está apto a compreender os nossos dados. Entretanto, ainda precisamos comunicar ao nosso programa qual banco de dados que vai ser utilizado — Vale ressaltar que diferentes bancos de dados possuem diferentes tipos de configurações.&lt;/p&gt;
&lt;h3&gt;
  
  
  Configurar o Contexto do Banco de Dados no arquivo Program.cs
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Inserir o nosso Contexto do banco de dados.

&lt;ul&gt;
&lt;li&gt;Ao entrar no arquivo &lt;code&gt;Program.cs&lt;/code&gt;, vamos inserir o nosso Contexto do banco de dados no nosso programa.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Configuração do banco de dados&lt;/span&gt;
&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;DessaVezEuNaoEsquecoContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseSqlite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetConnectionString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"DefaultConnection"&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Se você instalou o .NET com o comando &lt;code&gt;dotnet new webapi -n DessaVezEuNaoEsquecoAPI&lt;/code&gt;, seu arquivo &lt;code&gt;Program.cs&lt;/code&gt; deve estar similar a esse arquivo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqru3txvfc4pzokmkun8m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqru3txvfc4pzokmkun8m.png" alt="Imagem do exemplo da estrutura inicial do .NET" width="800" height="861"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esse arquivo nesse modelo é o padrão da aplicação (podendo conter variações a depender da versão). Nele temos uma aplicação que irá nos retornar a temperatura. Mas não é isso que queremos. &lt;/p&gt;

&lt;p&gt;Vamos realizar uma limpeza nele, removendo todos os itens que não vão interessar ao nosso projeto.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;DessaVezEuNaoEsquecoAPI.Data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.EntityFrameworkCore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WebApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddSwaggerGen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SwaggerDoc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;OpenApiInfo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"DessaVezEuNaoEsqueco API"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"v1"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Add services to the container.&lt;/span&gt;
&lt;span class="c1"&gt;// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle&lt;/span&gt;
&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddEndpointsApiExplorer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddSwaggerGen&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt;  &lt;span class="n"&gt;app&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt;  &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Configure the HTTP request pipeline.&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IsDevelopment&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseSwagger&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseSwaggerUI&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseHttpsRedirection&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;As modificações realizadas nesse código consistem na remoção do código predefinido e a inserção da nossa conexão com o SQLite. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Adição do Banco de Dados:
&lt;code&gt;builder.Services.AddDbContext&amp;lt;DessaVezEuNaoEsquecoContext&amp;gt;(options  =&amp;gt; options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection")));&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;  O código atual introduz a configuração do banco de dados SQLite, o que permite à aplicação persistir dados de maneira mais robusta com o Entity Framework&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Essa linha de código configura o contexto do Entity Framework Core (&lt;code&gt;DessaVezEuNaoEsquecoContext&lt;/code&gt;) para usar um banco de dados SQLite com a string de conexão definida na configuração da aplicação.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A função &lt;strong&gt;GetConnectionString&lt;/strong&gt; é responsável por trazer a nossa comunicação com o banco de dados. O valor passado por parâmetro &lt;code&gt;“DefaultConnection”&lt;/code&gt; ainda não foi definido, então caso você tente rodar o projeto, provavelmente você receberá um erro.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A função GetConnectionString irá buscar no arquivo appsettings.json a propriedade DefaultConnection.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para nossa conexão estar completa, precisamos acessar o arquivo &lt;code&gt;appsettings.json&lt;/code&gt; 𓆉 e inserir o a nossa propriedade:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"ConnectionStrings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"DefaultConnection"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Data Source=DessaVezEuNaoEsquecoDb.db"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Arquivo appsettings.json&lt;/strong&gt; em &lt;em&gt;appsettings.json&lt;/em&gt; na raíz do projeto:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fixkks7xerzezmv7io909.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fixkks7xerzezmv7io909.png" alt="Bloco de código do appsettings.json" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI/blob/main/appsettings.json" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt; para ver no Github.
&lt;/h4&gt;

&lt;p&gt;A propridade no JSON &lt;em&gt;DefaultConnection&lt;/em&gt; é responsável por realizar a nossa conexão com o banco de dados. Em bancos mais complexos que precisem de autenticação, essa &lt;em&gt;DefaultConnection&lt;/em&gt; pode variar, como o SQLServer, MySQL ou PostgreSQL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbx8axjzwzc3g04mwvgsu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbx8axjzwzc3g04mwvgsu.png" alt="Pit-stop Arquivo AppSettings.json" width="800" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;☕︎ O arquivo &lt;code&gt;appsettings.json&lt;/code&gt; é um arquivo de configuração usado para armazenar configurações de forma estruturada em formato JSON. Ele permite que você defina valores de configuração que podem ser facilmente acessados e usados em toda a aplicação, como strings de conexão com bancos de dados, configurações de logging, chaves de API, e outras opções de configuração. No nosso caso, utilizamos para realizar a nossa conexão com o SQLite.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Seu projeto agora deve ser capaz de realizar comunicações com o Entity Framework.&lt;/p&gt;

&lt;p&gt;O pacote já está configurado corretamente na sua máquina e você não precisará mais utilizar o SQL nativo para realizar operações com o banco de dados.&lt;/p&gt;
&lt;h4&gt;
  
  
  Migração de Banco de Dados
&lt;/h4&gt;

&lt;p&gt;Se você já está familiarizado com ORMs, provavelmente você também estará familiarizado com o que são migrações de bancos de dados. &lt;br&gt;
Se você não está familiarizado, vamos te "familiarizar" agora!&lt;/p&gt;

&lt;p&gt;Imagine que você está construindo uma cidade (sua aplicação) e que precisa de um mapa (o banco de dados) para saber onde cada prédio (tabela) deve ser colocado. No início, seu mapa pode ser simples: apenas algumas ruas e alguns prédios. Mas à medida que sua cidade cresce, você precisa adicionar novos bairros, talvez uma escola aqui, um parque ali, ou até mesmo reconfigurar algumas ruas para melhorar o tráfego. Essas mudanças são necessárias para que a cidade continue a funcionar bem e atenda às novas necessidades dos seus habitantes (usuários).&lt;/p&gt;

&lt;p&gt;No contexto de banco de dados, as migrações funcionam da mesma forma. À medida que sua aplicação evolui, você pode precisar adicionar novas tabelas, alterar colunas existentes ou modificar a estrutura dos dados. O Entity Framework facilita essas mudanças, aplicando migrações que transformam automaticamente a estrutura do banco de dados para refletir as mudanças no seu código.&lt;/p&gt;
&lt;h4&gt;
  
  
  Migração com o Entity Framework
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;No Console do Gerenciador de Pacotes NuGet, execute o seguinte comando:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet ef migrations add CriacaoEntidadeAtividade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;Você precisar ter o dotnet tool instalado globalmente. Rode o comando &lt;code&gt;dotnet tool install --global dotnet-ef&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esse comando executa nosso comando de adicionar uma migração. Ele mapeia as nossas Entidades (o Model que criamos mais cedo chamado Atividades.cs, lembra?) e insere corretamente no mapeamento do nosso banco de dados.&lt;/p&gt;

&lt;p&gt;Deve ser criado uma pasta na raíz do seu projeto chamado Migrations com essa atualização.&lt;/p&gt;

&lt;p&gt;Agora que realizamos essa funcionalidade do banco de dados com as nossas modificações — Referente a criação do Modelo Atividades, precisamos atualizar o nosso banco para que possamos visualizar as modificações.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;No Console do Gerenciador de Pacotes NuGet, execute o seguinte comando:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet ef database update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Visualização do Banco de Dados pelo DB Browser

&lt;ul&gt;
&lt;li&gt;Abra o DB Browser e clique em &lt;em&gt;Open Database.&lt;/em&gt; Selecione o arquivo que foi gerado após o comando dotnet ef update-database (DessaVezEuNaoEsquecoDb.db).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzzsiy73fq06z5t8f4ngc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzzsiy73fq06z5t8f4ngc.png" alt="Imagem 1 do DB Browser após migração" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você agora é capaz de realizar as modificações que foram realizadas diretamente no código em C#.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5kzpk1xlfpu03ihh8h5q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5kzpk1xlfpu03ihh8h5q.png" alt="Imagem 2 do DB Browser após migração" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esse é o poder de uma ORM e é com essa ferramenta poderosa que desenvolvedores conseguem produzir absolutamente mais.&lt;/p&gt;
&lt;h3&gt;
  
  
  Controllers
&lt;/h3&gt;

&lt;p&gt;Os &lt;strong&gt;Controllers&lt;/strong&gt; são extremamente importantes para a nossa aplicação.&lt;/p&gt;

&lt;p&gt;Em uma aplicação Web API, os controllers desempenham um papel central na exposição de endpoints que permitem a interação com dados através de solicitações &lt;strong&gt;HTTP&lt;/strong&gt;, como &lt;strong&gt;GET, POST&lt;/strong&gt;, &lt;strong&gt;PUT e DELETE&lt;/strong&gt;. Aqui estão os principais aspectos e funcionalidades dos controllers em uma Web API utilizando .NET.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Falamos mais cedo sobre Protocolo HTTP mas vamos relembrar? &lt;br&gt;
O protocolo HTTP é um conjunto de regras que define como informações são transmitidas na internet. Funciona como um mensageiro entre clientes (como um navegador) e servidores (que armazenam sites e dados). O HTTP permite solicitar e receber informações, como páginas da web e dados de aplicativos.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;
  
  
  Criando Nossos Controllers
&lt;/h4&gt;

&lt;p&gt;Só isso não basta para que possamos realizar requisições em nosso ambiente local. Vamos utilizar uma interface conhecida como &lt;strong&gt;Swagger&lt;/strong&gt; para nos auxiliar na visualização das requisições. &lt;/p&gt;

&lt;p&gt;O Swagger é uma ferramenta que ajuda desenvolvedores a criar, documentar e testar APIs. Ele cria uma página &lt;em&gt;web&lt;/em&gt; onde você pode ver todas as rotas da API, os parâmetros que elas aceitam, e até testar as requisições diretamente na página. Isso facilita a comunicação entre desenvolvedores e torna mais fácil entender e usar a API.&lt;/p&gt;

&lt;p&gt;Existem outras formas de realizarmos esse tipo de requisição via protocolo HTTP como o &lt;strong&gt;Postman&lt;/strong&gt;, &lt;strong&gt;Insominia&lt;/strong&gt; ou até mesmo diretamente pelo &lt;strong&gt;CURL&lt;/strong&gt;. Entretanto, nesse artigo, como dito anteriormente, vamos focar no uso do mínimo de ferramentas possíveis para evitarmos abstrações.&lt;/p&gt;

&lt;p&gt;Antes de aprofundarmos mais na criação dos nossos Controllers, eu disponibilizei o código dessa aplicação no GitHub. &lt;/p&gt;

&lt;p&gt;O código está comentando e pode conter mais detalhes e informações.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/yagopeixinho" rel="noopener noreferrer"&gt;
        yagopeixinho
      &lt;/a&gt; / &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI" rel="noopener noreferrer"&gt;
        DessaVezEuNaoEsquecoAPI
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      DessaVezEuNaoEsquecoAPI, desenvolvida em .NET 8.0 &amp;amp; C#, é a sua solução definitiva para garantir que você nunca mais esqueça de nada! Seja uma lista de compras, tarefas diárias, itens para uma viagem ou qualquer outra coisa importante, essa API oferece uma interface simples e intuitiva para gerenciar suas listas e lembretes de maneira eficiente.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
      &lt;a href="https://dev.to/yagopeixinho/hello-world-mas-em-uma-web-api-com-net-8-1jp6-temp-slug-4672107?preview=3ae07a93613da5d714c9d72db668e34b0b94a669c130e8eb031de5e38e748d7e33a79771266fb7bca7ba2221ff0c653e792ff4fa43c2215645562425" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/8fcaf835cae63aab3c645d3c7579ecb8450ad24d969e1ef4acd32a4db0e47e3c/68747470733a2f2f696d672e69636f6e73382e636f6d2f636f6c6f722f313230302f6e65742d6672616d65776f726b2e6a7067" width="120px"&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Uma Introdução ao Essencial com Entity Framework e SQLite.&lt;/h4&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI#introdu%C3%A7%C3%A3o" rel="noopener noreferrer"&gt;Introdução&lt;/a&gt; •
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI#contato" rel="noopener noreferrer"&gt;Contato&lt;/a&gt; •
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI#licen%C3%A7a" rel="noopener noreferrer"&gt;Licença&lt;/a&gt;
&lt;/p&gt;

&lt;div&gt;
  &lt;a href="https://dev.to/yagopeixinho/hello-world-mas-em-uma-web-api-com-net-8-1jp6-temp-slug-4672107?preview=3ae07a93613da5d714c9d72db668e34b0b94a669c130e8eb031de5e38e748d7e33a79771266fb7bca7ba2221ff0c653e792ff4fa43c2215645562425" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/2441c5c4261c2766b7f665a7fab13f71cd647b2b68e88bb7a7533d4b089cf83f/68747470733a2f2f6d65646961322e6465762e746f2f64796e616d69632f696d6167652f77696474683d313030302c6865696768743d3432302c6669743d636f7665722c677261766974793d6175746f2c666f726d61743d6175746f2f68747470732533412532462532466465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d25324675706c6f61647325324661727469636c657325324675666835703530746b306571693579347276346e2e706e67"&gt;&lt;/a&gt;
&lt;/div&gt;



&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Introdução&lt;/h2&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Desenvolva a API DessaVezEuNaoEsqueco. No meio desse desenvolvimento, vamos mergulhar nos conceitos do .NET e API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fundamentos Essenciais para Web APIs com .NET: Uma Introdução à Propedêutica (corpo de ensinamentos introdutórios ou básicos de uma disciplina; ciência preliminar, introdução.) com Entity Framework e SQLite. Entenda os conceitos por trás de uma &lt;strong&gt;Web API&lt;/strong&gt; utilizando o .NET 8.0 e o &lt;strong&gt;Entity Framework Core&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esse artigo é destinado para todos os níveis de programadores, desde os menos experientes até os mais avançados. Nosso objetivo é compreender o que acontece por trás dos panos e nutrir alguns conhecimentos acerca de uma &lt;strong&gt;API&lt;/strong&gt; (Application Programming Interface) e seus comportamentos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sumário:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compreendendo .NET &amp;amp; C#&lt;/li&gt;
&lt;li&gt;Entendendo o que é uma API
&lt;ul&gt;
&lt;li&gt;Protocolo HTTP&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;HTTP Código de Resposta (Status Code)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Criação do projeto &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI" rel="noopener noreferrer"&gt;DessaVezEuNaoEsquecoAPI&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Sobre o Projeto&lt;/li&gt;
&lt;li&gt;Instalação
&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h3&gt;
  
  
  Configurando Swagger para realizarmos solicitações HTTP
&lt;/h3&gt;

&lt;p&gt;No seu arquivo &lt;code&gt;Program.cs&lt;/code&gt; insira o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt;  &lt;span class="nn"&gt;Microsoft.OpenApi.Models&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddSwaggerGen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SwaggerDoc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;OpenApiInfo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"DessaVezEuNaoEsqueco API"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"v1"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Adicionar serviço de controllers&lt;/span&gt;
&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddControllers&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Middleware de desenvolvimento para Swagger &lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IsDevelopment&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseSwagger&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseSwaggerUI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SwaggerEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/swagger/v1/swagger.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Minha API v1"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Define os endpoints da API &lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapControllers&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Arquivo Program.cs&lt;/strong&gt; na raíz do projeto após a implementação do Swagger:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vgqvazo5z3m2hblcz1q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vgqvazo5z3m2hblcz1q.png" alt="Imagem da implementação do Swagger" width="800" height="846"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI/blob/main/Program.cs" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt; para ver no Github.
&lt;/h4&gt;

&lt;p&gt;Agora nosso código consegue enteder o Swagger e é capaz de realizar requisições.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Adição do Serviço de Controllers&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;  Foi adicionado &lt;code&gt;builder.Services.AddControllers();&lt;/code&gt; dentro do método &lt;code&gt;ConfigureServices()&lt;/code&gt;. Esse serviço é necessário para que a aplicação reconheça e configure os controllers que você define na sua aplicação Web API (no nosso caso, o AtividadesController).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Mapeamento de Controllers&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;  Mantido &lt;code&gt;app.MapControllers();&lt;/code&gt; para assegurar que todos os controllers definidos na aplicação sejam mapeados corretamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com as configurações do Swagger implementadas, podemos prosseguir com o desenvolvimento dos nossos Controllers.&lt;/p&gt;
&lt;h3&gt;
  
  
  Criando arquivo &lt;code&gt;AtividadesController.cs&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Crie um arquivo no diretório do seu projeto chamado Controllers e dentro desse diretório crie um arquivo de classe chamado &lt;code&gt;AtividadesController&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E então, afinal, você me questiona... &lt;strong&gt;O que é um Controller e quais as suas responsabilidades?&lt;/strong&gt; Um Controller em uma API gerencia as requisições HTTP, processa dados e retorna respostas. Ele mapeia endpoints para métodos que executam ações como criar, ler, atualizar e deletar dados. Ele é responsável pelo contato inicial com a API e saberá lidar com os dados e o que fazer. &lt;/p&gt;

&lt;p&gt;O seu arquivo &lt;code&gt;AtividadesController.cs&lt;/code&gt; deve estar similar ao meu código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;DessaVezEuNaoEsquecoAPI.Controllers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AtividadesController&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui definimos a nossa classe Controller mas não implementamos absolutamente nenhum método. Vamos continuar codando?&lt;/p&gt;

&lt;h3&gt;
  
  
  Definindo o Método &lt;strong&gt;GET&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vamos desenvolver o nosso GET para recuperarmos todas as nossas atividades

&lt;ul&gt;
&lt;li&gt;O nosso método chamado &lt;code&gt;GetAllAtividades&lt;/code&gt; é o nosso método por retornar todas as nossas atividades armazenadas no banco de dados.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Vamos inserir a codificação inicial para o nosso Controller e principalmente o nosso método GET:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;DessaVezEuNaoEsquecoAPI.Data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Importa o namespace que contém a classe DessaVezEuNaoEsquecoContext, que é o contexto do Entity Framework Core usado para interagir com o banco de dados.&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;DessaVezEuNaoEsquecoAPI.Models&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// DessaVezEuNaoEsquecoAPI.Models: Importa o namespace que contém a classe Atividade, que é o modelo representando uma tabela no banco de dados.&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.AspNetCore.Mvc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Microsoft.AspNetCore.Mvc: Importa o namespace que contém tipos e classes para criar controladores e manipular requisições HTTP.&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.EntityFrameworkCore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Microsoft.EntityFrameworkCore: Importa o namespace que contém classes e métodos para trabalhar com o Entity Framework Core, uma ORM (Object-Relational Mapper) para .NET.&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;DessaVezEuNaoEsquecoAPI.Controllers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ApiController&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"api/[controller]"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AtividadesController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ControllerBase&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;DessaVezEuNaoEsquecoContext&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;AtividadesController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DessaVezEuNaoEsquecoContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_context&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// GET: api/atividades&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HttpGet&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Atividade&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetAtividades&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Atividades&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToListAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Woooow... muita informação? Calma, Vamos passar por cada informação relevante durante a implementação do nosos controller. Recomendo que revisite o código quantas vezes sentir necessidade.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Using Statements&lt;/strong&gt;&lt;br&gt;
 O &lt;code&gt;using&lt;/code&gt; statement é usado para incluir nossos namespaces, permitindo que você use classes e métodos definidos nesses namespaces sem precisar especificar o caminho completo. Isso simplifica o código e melhora a legibilidade. Inserimos os respectivos &lt;em&gt;using&lt;/em&gt; no nosso código.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Atributos e ControllerBase&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;DessaVezEuNaoEsquecoAPI.Controllers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ApiController&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"api/[controller]"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AtividadesController1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ControllerBase&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nota-se que foi implementado novos atributos: &lt;code&gt;[ApiController]&lt;/code&gt;, &lt;code&gt;Route&lt;/code&gt; uma herança na classe &lt;code&gt;AtividadesController&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ApiController:&lt;/strong&gt; O atributo [ApiController] é usado para anotar uma classe como um controlador de API no .NET. Esse atributo oferece uma série de convenções e comportamentos automáticos que facilitam o desenvolvimento de APIs. Entre as funcionalidades fornecidas por [ApiController], incluem-se:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Route:&lt;/strong&gt; O atributo &lt;code&gt;[Route]&lt;/code&gt; é usado para definir a rota de acesso ao controlador e suas ações. O valor &lt;code&gt;"api/[controller]"&lt;/code&gt; é um modelo de rota que define como as URLs serão mapeadas para este controlador. No caso específico &lt;code&gt;"api/[controller]"&lt;/code&gt;, &lt;code&gt;[controller]&lt;/code&gt; é um placeholder que será substituído pelo nome do controlador, sem o sufixo "Controller". Por exemplo, se o nome da classe é &lt;code&gt;AtividadesController&lt;/code&gt;, a rota será &lt;code&gt;api/atividades&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ControllerBase:&lt;/strong&gt; &lt;code&gt;ControllerBase&lt;/code&gt; é a classe base para controladores em uma API. Ela fornece muitas das funcionalidades que são essenciais para criar controladores de API. A classe &lt;code&gt;ControllerBase&lt;/code&gt; é uma versão mais leve da classe &lt;code&gt;Controller&lt;/code&gt; e não inclui funcionalidades específicas para renderização de views (o que é apropriado para APIs RESTful). Algumas funcionalidades fornecidas por &lt;code&gt;ControllerBase&lt;/code&gt; incluem:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Método GET&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// GET: api/atividades&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HttpGet&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Atividade&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetAtividades&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Atividades&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToListAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Foi desenvolvido nessa codificação o método &lt;code&gt;GetAtividades&lt;/code&gt;: Método assíncrono que retorna uma &lt;code&gt;Task&lt;/code&gt; contendo um &lt;code&gt;ActionResult&lt;/code&gt; com uma lista de objetos &lt;code&gt;Atividade&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// GET: api/atividades&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HttpGet&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Atividade&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetAtividades&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Atividades&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToListAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse método busca todas as atividades do banco de dados de forma assíncrona e retorna a lista como resultado da requisição. O &lt;code&gt;ToListAsync()&lt;/code&gt; é o método do próprio Entity Framework que nos retorna a listagem inteira de todas as atividades — Ressalto aqui o poder de uma ORM em uma aplicação.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arquivo AtividadeController.cs&lt;/strong&gt; em &lt;code&gt;Controllers/AtividadesController.cs&lt;/code&gt; após implementação do método GET:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fru779cnxv8kyekb6opvr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fru779cnxv8kyekb6opvr.png" alt="Bloco de código do GET no Controller" width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI/blob/main/Controllers/AtividadesController.cs" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt; para ver no Github.
&lt;/h4&gt;

&lt;p&gt;Com essas modificações, conseguimos agora realizar requisições &lt;strong&gt;GET&lt;/strong&gt; para obter uma lista de todas as atividades armazenadas no banco de dados, utilizando o Entity Framework Core para interagir com o banco e retornando os dados no formato JSON por padrão.&lt;/p&gt;

&lt;p&gt;Ao rodar o projeto, o &lt;strong&gt;Swagger&lt;/strong&gt; nos retornará uma listagem vazia. Desenvolvemos o método que tratará para nós todas as atividades. Mas ainda não criamos o método para &lt;em&gt;Criar&lt;/em&gt; essa atividades. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zli62ppias7xuvak2zn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zli62ppias7xuvak2zn.png" alt="Retorno do GET do Swagger" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Definindo o Método &lt;strong&gt;POST&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vamos desenvolver o nosso POST para sermos capazes de criar as nossas atividades

&lt;ul&gt;
&lt;li&gt;O nosso método chamado &lt;code&gt;PostAtividade&lt;/code&gt; é o nosso método por criar as nossas atividades.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vamos inserir a codificação no nosso Controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;  &lt;span class="c1"&gt;// POST: api/atividades&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HttpPost&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Atividade&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;PostAtividade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Atividade&lt;/span&gt; &lt;span class="n"&gt;atividade&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Atividades&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atividade&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Adicionamos &lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SaveChangesAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;CreatedAtAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetAtividades&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;atividade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;atividade&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa anotação indica que este método responde a uma solicitação HTTP POST. Geralmente, os métodos &lt;code&gt;POST&lt;/code&gt; são usados para criar novos recursos no servidor.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Função Add em &lt;code&gt;Atividades.Add&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O Add é responsável por informar ao Entity Framework que novas informações estão sendo inseridas no nsso contexto. Nota-se, também, que na linha abaixo temos o método &lt;code&gt;SaveChangesAsync&lt;/code&gt;, responsável por salvar essa informação no nosso banco de dados.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Função CreatedAtAction&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O nosso retorno usa um método auxiliar que retorna um status HTTP 201 Created (lembra que falamos sobre Status Code mais cedo?)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Arquivo AtividadeController.cs&lt;/strong&gt; em &lt;code&gt;Controllers/AtividadesController.cs&lt;/code&gt; após implementação do método POST:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fenq8rn32sr38luuq2teb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fenq8rn32sr38luuq2teb.png" alt="Bloco de código do método POST" width="800" height="725"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI/blob/main/Controllers/AtividadesController.cs" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt; para ver no Github.
&lt;/h4&gt;

&lt;p&gt;Vamos realizar agora a tentativa de criar uma nova atividade pelo Swagger?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7k5h7z881t7qpa43qrl4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7k5h7z881t7qpa43qrl4.png" alt="Imagem do Swagger no POST" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao clicar no botão “Execute”, você deve ser capaz de visualizar a criação da nossa atividade. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk56m4j2ekpoioleyfh46.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk56m4j2ekpoioleyfh46.png" alt="Imagem de resposta do Swagger no método POST" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essa é a nossa resposta. O &lt;strong&gt;status code 200&lt;/strong&gt; sinaliza que a criação foi realizada com sucesso. Podemos visualizar agora que a nossa atividade  “Limpar o Monitor” foi criada corretamente no nosso banco de dados.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzb02a5elbt3dyozjdn8l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzb02a5elbt3dyozjdn8l.png" alt="Imagem da verificação do Swagger no método POST" width="800" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora que somos capazes de listar todas as nossas atividades e também criar uma nova atividade. &lt;/p&gt;

&lt;p&gt;Mas você me questiona: “Eu preciso procurar na minha gigantesca lista de itens que foram procastinados por uma atividade específica, como posso fazer isso?”. &lt;/p&gt;
&lt;h3&gt;
  
  
  Definindo o Método &lt;strong&gt;GET Individual&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vamos desenvolver o nosso GET Individual para sermos capazes de listar uma única atividade. Vamos realizar a busca ao banco de dados pelo ID.

&lt;ul&gt;
&lt;li&gt;O nosso método chamado &lt;code&gt;GetAtividade&lt;/code&gt; é o nosso método responsável por recuperarmos uma atividade individual.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vamos inserir a codificação no nosso Controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// GET: api/atividades/1&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;HttpGet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{id}"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt;  &lt;span class="k"&gt;async&lt;/span&gt;  &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Atividade&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetAtividade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;  &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Procura uma atividade pelo ID fornecido.&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt;  &lt;span class="n"&gt;atividade&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt;  &lt;span class="k"&gt;await&lt;/span&gt;  &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Atividades&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FindAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Verifica se a atividade foi encontrada. Se não, retorna NotFound.&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atividade&lt;/span&gt;  &lt;span class="p"&gt;==&lt;/span&gt;  &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;  &lt;span class="nf"&gt;NotFound&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt;  &lt;span class="n"&gt;atividade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse método é responsável por realizar o método &lt;code&gt;FindAsync&lt;/code&gt;, do Entity Framework, que busca dentro do nosso banco de dados por alguma informação específica — No nosso caso, pelo &lt;em&gt;id&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Além de realizar essa busca, ele também verifica se o valor é &lt;em&gt;null&lt;/em&gt;, e caso seja, retornamos um método &lt;code&gt;NotFound()&lt;/code&gt;, responsável por informar ao nosso Client que nenhuma informação daquele valor específico foi encontrado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arquivo AtividadeController.cs&lt;/strong&gt; em &lt;code&gt;Controllers/AtividadesController.cs&lt;/code&gt; após implementação do método GET por ID:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59t56f28jcyzb4bmm6p3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59t56f28jcyzb4bmm6p3.png" alt="Bloco de código do GET Individual" width="800" height="817"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI/blob/main/Controllers/AtividadesController.cs" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt; para ver no Github.
&lt;/h4&gt;

&lt;p&gt;Rode o projeto e, quando o Swagger inicializar, localize o método recém-criado. Insira um ID válido e um ID inválido para testar o nosso endpoint.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbq5hmlocx6lm57n7xu7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbq5hmlocx6lm57n7xu7.png" alt="Imagem do Swagger testando o Endpoint" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao clicar no botão "Execute", você deverá visualizar o retorno em JSON de algum item da lista.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6ewnk1g0ann2j0dde0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6ewnk1g0ann2j0dde0w.png" alt="Listagem do Swagger com a criação da atividade" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Observe que a nossa Atividade "Limpar o Monitor" apareceu na listagem de itens recuperados.&lt;/p&gt;

&lt;p&gt;Agora que conseguimos recuperar uma informação individual, precisamos ser capazes de editar essa informação.&lt;/p&gt;
&lt;h3&gt;
  
  
  Vamos definir o método &lt;strong&gt;PUT&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vamos desenvolver o nosso PUT para sermos capazes de realizar modificações por atividade

&lt;ul&gt;
&lt;li&gt;O nosso método chamado &lt;code&gt;PutAtividade&lt;/code&gt; é o nosso método responsável por realizarmos edição em uma atividade já existente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vamos inserir a codificação no nosso Controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;
    &lt;span class="c1"&gt;// PUT: api/atividades/1&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;HttpPut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{id}"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;PutAtividade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Atividade&lt;/span&gt; &lt;span class="n"&gt;atividade&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Verifica se o ID da URL é diferente do ID da atividade&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;atividade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Retorna um BadRequest (400) se os IDs não coincidirem&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;BadRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Atualiza o estado da atividade no contexto para Modified&lt;/span&gt;
        &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Atividades&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atividade&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Salva as mudanças no banco de dados de forma assíncrona&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SaveChangesAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DbUpdateConcurrencyException&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Se ocorrer uma exceção de concorrência, re-lança a exceção&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Retorna NoContent (204) para indicar sucesso sem conteúdo no corpo da resposta&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atividade&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora nossas ativiades podem ser alteradas. Vamos passar sobre algumas inserções no código?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Try &amp;amp; Catch&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bloco try&lt;/strong&gt;: O código dentro do bloco try é executado normalmente. Se ocorrer uma exceção (erro) durante a execução desse código, o fluxo é interrompido e a exceção é lançada para o bloco catch.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;try
&lt;span class="o"&gt;{&lt;/span&gt;
    // Código que pode lançar uma exceção
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bloco catch&lt;/strong&gt;: O bloco catch captura a exceção lançada pelo bloco try. Aqui, você pode especificar um tipo de exceção específica ou usar um tipo genérico para capturar qualquer exceção. É o local ideal para tratar o erro ou registrar informações sobre ele.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;catch &lt;span class="o"&gt;(&lt;/span&gt;Exception ex&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
    // Código para tratar a exceção
    Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;$"Erro: {ex.Message}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora nossas ativiades podem ser alteradas. Vamos realizar nossas alterações pelo Swagger?&lt;/p&gt;

&lt;p&gt;Vamos tentar agora atualizar a nossa Atividade “Limpar Monitor” para “Lavar Louça”. Para isso, rode o projeto e insira o &lt;em&gt;id&lt;/em&gt; no método PUT. &lt;/p&gt;

&lt;p&gt;No nosso body, inserimos a propriedade “nome” para “Lavar Louça”. Com todos os campos devidamente preenchidos, vamos clicar em “Execute”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F88as68sjo6cneqctyobd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F88as68sjo6cneqctyobd.png" alt="Imagem de inserir dados no POST via Swagger" width="800" height="421"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feik2y2qof53skzmg25dk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feik2y2qof53skzmg25dk.png" alt="Imagem de retorno de dados no POST via Swagger" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note que nossa resposta trouxe o ID 4, agora com o nome devidamente alterado. Se quiser, experimente executar outros métodos, como o &lt;strong&gt;GET&lt;/strong&gt;, para visualizar a informação modificada. Você também pode usar o DB Browser para verificar as mudanças diretamente no banco de dados. Fique à vontade para explorar!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arquivo AtividadeController.cs&lt;/strong&gt; em &lt;code&gt;Controllers/AtividadesController.cs&lt;/code&gt; após implementação do método PUT:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhm2lm9ic7ari51f6xoh0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhm2lm9ic7ari51f6xoh0.png" alt="Bloco de código após implementação do método PUT" width="800" height="1254"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI/blob/main/Controllers/AtividadesController.cs" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt; para ver no Github.
&lt;/h4&gt;

&lt;p&gt;Suponhamos esta situação: "Eu inseri essa atividade, mas ela já foi feita por outra pessoa e agora preciso deletá-la do meu sistema." Para evitar esse tipo de problema no nosso projeto, vamos criar um método para deletar atividades que não são mais úteis.&lt;/p&gt;
&lt;h3&gt;
  
  
  Definindo o Método &lt;strong&gt;DELETE&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vamos desenvolver o nosso DELETE para sermos capazes de realizar modificações por atividade

&lt;ul&gt;
&lt;li&gt;O nosso método chamado &lt;code&gt;DeleteAtividade&lt;/code&gt; é o nosso método responsável por realizarmos a deleção de uma atividade existente.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vamos inserir a codificação no nosso Controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// DELETE: api/atividades/5&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;HttpDelete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{id}"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;DeleteAtividade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Tenta encontrar a atividade com o ID fornecido no banco de dados&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;atividade&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Atividades&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FindAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Verifica se a atividade não foi encontrada&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atividade&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Retorna NotFound (404) se a atividade não existir&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;NotFound&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Remove a atividade do contexto&lt;/span&gt;
    &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Atividades&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atividade&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Salva as mudanças no banco de dados de forma assíncrona&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SaveChangesAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;// Retorna NoContent (204) para indicar sucesso sem conteúdo no corpo da resposta&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;NoContent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse código é responsável por realizar a remoção de atividades do nosso banco de dados.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Encontrar a Atividade&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;await _context.Atividades.FindAsync(id)&lt;/code&gt; tenta localizar a atividade com o ID fornecido no banco de dados. Isso retorna a atividade se ela existir ou &lt;code&gt;null&lt;/code&gt; se não for encontrada.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Verificação de Existência&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Se &lt;code&gt;atividade&lt;/code&gt; for &lt;code&gt;null&lt;/code&gt;, significa que não foi encontrada uma atividade com o ID fornecido. Retorna &lt;code&gt;NotFound&lt;/code&gt; (404) para indicar que o recurso não foi encontrado.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Remoção da Atividade&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Usa &lt;code&gt;_context.Atividades.Remove(atividade)&lt;/code&gt; para marcar a atividade para remoção do contexto.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Com essas atualizações, nosso CRUD no Controller está pronto para receber todos os métodos HTTP (GET, POST, PUT e DELETE). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arquivo AtividadeController.cs&lt;/strong&gt; em &lt;code&gt;Controllers/AtividadesController.cs&lt;/code&gt; após implementação do método DELETE:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuj4bmkaqznbf94hep07x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuj4bmkaqznbf94hep07x.png" alt="Bloco de código após implementação do método Delete" width="800" height="839"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://github.com/yagopeixinho/DessaVezEuNaoEsquecoAPI/blob/main/Controllers/AtividadesController.cs" rel="noopener noreferrer"&gt;Clique aqui&lt;/a&gt; para ver no Github.
&lt;/h4&gt;

&lt;p&gt;Agora, vamos executar o projeto e realizar a exclusão de uma atividade específica.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para este exemplo, vamos remover a atividade "Lavar Louça" com o ID 4.

&lt;ul&gt;
&lt;li&gt;No Swagger, localize o método DELETE correspondente.&lt;/li&gt;
&lt;li&gt;Insira o ID 4 e clique no botão "Executar".&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiknypbc2mghxolk40l3e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiknypbc2mghxolk40l3e.png" alt="Imagem para deletar o ID 4 via Swagger" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após a execução, a atividade será removida com sucesso. Para confirmar, você pode realizar uma requisição &lt;em&gt;GET&lt;/em&gt;. Ao visualizar o resultado, perceberá que a atividade "Lavar Louça" foi removida e não aparece mais na lista de itens pendentes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqo6kkndnal6xr08kn46y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqo6kkndnal6xr08kn46y.png" alt="Visualização via Swagger do método Delete" width="800" height="290"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feplyyiba2j8hg2la1hc4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feplyyiba2j8hg2la1hc4.png" alt="Resultado final via Swagger do método Delete" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sinta-se à vontade para explorar mais: crie novos itens, edite os existentes e faça requisições para verificar as informações. Além disso, sugiro que você explore o banco de dados diretamente para acompanhar as alterações em tempo real.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão &amp;amp; Resumo
&lt;/h2&gt;

&lt;p&gt;Trilhamos um longo caminho. Se você chegou até aqui, você agora é capaz de entender &lt;strong&gt;como funciona uma API&lt;/strong&gt;, alguns conceitos da propedeúticas que lhe ajudará durante os seus estudos.&lt;/p&gt;

&lt;p&gt;Vale destacar que &lt;strong&gt;este CRUD é uma implementação básica.&lt;/strong&gt; Em uma aplicação .NET real, você encontrará uma estrutura muito mais complexa, com várias camadas e funcionalidades avançadas. &lt;em&gt;Este artigo foca apenas na estrutura fundamental de uma API para proporcionar uma compreensão inicial.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Neste artigo, exploramos a criação da &lt;strong&gt;API DessaVezEuNaoEsqueco&lt;/strong&gt;, mergulhando nos conceitos fundamentais do .NET 8.0 e do &lt;strong&gt;Entity Framework Core&lt;/strong&gt;. Desde a compreensão do .NET e C#, passando pela definição e funcionamento de uma API até a implementação prática.&lt;/p&gt;

&lt;p&gt;Espero que este artigo tenha sido um recurso valioso para você, ajudando a desmistificar o desenvolvimento de APIs e fornecendo uma base sólida para projetos futuros.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>api</category>
      <category>sqlite</category>
    </item>
    <item>
      <title>Padrão 7-1 do SASS</title>
      <dc:creator>Yago Peixinho</dc:creator>
      <pubDate>Wed, 12 Jun 2024 00:00:55 +0000</pubDate>
      <link>https://dev.to/yagopeixinho/padrao-7-1-do-sass-1jl7</link>
      <guid>https://dev.to/yagopeixinho/padrao-7-1-do-sass-1jl7</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Arquitetura SASS para elevar o nível do seu projeto.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Imagine esta situação: você precisa urgentemente alterar a cor de um botão que está destoando completamente do design padrão da plataforma. Você abre seu editor de código, localiza o arquivo HTML, procura pelo botão… e, para sua surpresa, percebe que ele não possui nenhuma classe atribuída.&lt;/p&gt;

&lt;p&gt;Como pode um elemento não ter classe, mas ainda assim ter um estilo aplicado? Após alguns minutos de busca, você descobre que existe uma pseudoclasse global que afeta todos os botões na plataforma. Após essa descoberta, você cria uma classe orfã exclusivamente para aquele botão ou insere os estilos inline.&lt;/p&gt;

&lt;p&gt;Nesse meio tempo, o Brasil poderia muito bem ter sofrido 7 gols da Alemanha novamente e você ainda não teria finalizado essa mudança. Diferentemente do 7–1 do Brasil X Alemanhã, o Padrão 7–1 do SASS pode te ajudar a economizar tempo e marcar um golaço na hora de abrir aquele &lt;em&gt;pull request&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Por que utilizar o Padrão 7–1?
&lt;/h2&gt;

&lt;p&gt;Quando seu código SASS está desorganizado, você acaba perdendo mais tempo procurando arquivos do que realmente aplicando modificações no estilo. Imagine-se navegando por um mar de arquivos, numa busca incansável para o estilo específico que precisa ser ajustado… Esse cenário não apenas consome um precioso tempo, mas também pode resultar em frustações e diminuição da produtividade.&lt;/p&gt;

&lt;p&gt;Manter um projeto com uma arquitetura e organização é extremamente importante! É como construir uma casa sobre uma fundação sólida: se a estrutura inicial não for bem estabelecida, cada ajuste futuro se torna uma batalha árdua - Isso torna-se ainda mais desafiador em um ambiente colaborativo, onde diferentes mãos podem moldar e remodelar o código ao longo do tempo.&lt;/p&gt;

&lt;p&gt;O padrão 7–1 do SASS não é apenas uma metodologia de organização de arquivos! Podemos considerar ele como uma bússola que guia os desenvolvedores através da clareza de sua organização. Ao adotar o padrão 7–1, você está investindo não apenas na estrutura do seu código, mas em uma produtividade geral.&lt;/p&gt;

&lt;p&gt;Podemos considerar o padrão 7–1 como um supermecado bem organizado, onde cada produto tem o seu lugar designado. O padrão 7–1 é como um repositor que categoriza cada produto, facilitando a busca e futuras referências. Ele estabelece uma hierarquia clara de arquivos, separando preocupações de forma lógica e intuitiva.&lt;/p&gt;

&lt;h2&gt;
  
  
  Organização de arquivos
&lt;/h2&gt;

&lt;p&gt;Esse padrão consiste em 7 pastas e 1 ficheiro. O ficheiro (geralmente chamado main.scss) é o ficheiro que importa todos os outros ficheiros parciais que devem ser compilados em uma única folha de estilo.&lt;/p&gt;

&lt;p&gt;As 7 pastas são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;base&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;components&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;layout&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;pages&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;themes&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;abstract&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;vendors&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O ficheiro único é:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;main.scss&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp6wchj2x17x8ubud7cuv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp6wchj2x17x8ubud7cuv.png" alt="Imagem de exemplo da estrutura de pastas" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cada pasta desempenha um papel crucial em termos de utilidade e organização dentro de um projeto. É crucial ressaltar a importância da conformidade com as nomenclaturas estabelecidas. As sete pastas devem seguir rigorosamente essas nomenclaturas padrão: &lt;em&gt;"base"&lt;/em&gt;, &lt;em&gt;"components"&lt;/em&gt;, entre outras. Isso assegura a manutenção de uma consistência e reconhecimento em diversos projetos.&lt;/p&gt;

&lt;p&gt;No arquivo principal, todos os estilos parciais serão importados usando a diretiva &lt;em&gt;&lt;a class="mentioned-user" href="https://dev.to/import"&gt;@import&lt;/a&gt;&lt;/em&gt;, consolidando, assim, nossa estrutura de estilos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vamos entender o que cada pasta faz e sua especificação…
&lt;/h2&gt;

&lt;p&gt;Antes de prosseguir, gostaria de mencionar que disponibilizei o código no GitHub. Fique à vontade para explorá-lo e utilizá-lo da maneira que julgar mais adequada.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/yagopeixinho" rel="noopener noreferrer"&gt;
        yagopeixinho
      &lt;/a&gt; / &lt;a href="https://github.com/yagopeixinho/padrao-7-1-sass" rel="noopener noreferrer"&gt;
        padrao-7-1-sass
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Arquitetura SASS para elevar o nível do seu projeto.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
      &lt;a href="https://dev.to/yagopeixinho/padrao-7-1-do-sass-1jl7" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/a133deb7ba5ab4ac2649db06161e04517360055d6336298a8a4495ea467b63bf/68747470733a2f2f736173732d6c616e672e636f6d2f6173736574732f696d672f7374796c6567756964652f7365616c2d636f6c6f722e706e67" width="120px"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Arquitetura SASS para elevar o nível do seu projeto.&lt;/h4&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;a href="https://github.com/yagopeixinho/padrao-7-1-sass#o-padr%C3%A3o-7-1-do-sass" rel="noopener noreferrer"&gt;Introdução&lt;/a&gt; •
  &lt;a href="https://github.com/yagopeixinho/padrao-7-1-sass#contato" rel="noopener noreferrer"&gt;Contato&lt;/a&gt; •
  &lt;a href="https://github.com/yagopeixinho/padrao-7-1-sass#licen%C3%A7a" rel="noopener noreferrer"&gt;Licença&lt;/a&gt;
&lt;/p&gt;

&lt;div&gt;
  &lt;a href="https://medium.com/@peixinhoyago/padr%C3%A3o-7-1-sass-0f768cb31d89" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0214d4550b480d9e23cc2070b4eb2631eafd67f44db3629e9e29c2fced21bcbf/68747470733a2f2f6d69726f2e6d656469756d2e636f6d2f76322f726573697a653a6669743a343830302f666f726d61743a776562702f312a6168317442666433324b4c343763572d3145747245512e706e67" width="600px"&gt;&lt;/a&gt;
&lt;/div&gt;



&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;O Padrão 7-1 do SASS&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Imagine esta situação: você precisa urgentemente alterar a cor de um botão que está destoando completamente do design padrão da plataforma. Você abre seu editor de código, localiza o arquivo HTML, procura pelo botão… e, para sua surpresa, percebe que ele não possui nenhuma classe atribuída.&lt;/p&gt;

&lt;p&gt;Como pode um elemento não ter classe, mas ainda assim ter um estilo aplicado? Após alguns minutos de busca, você descobre que existe uma pseudoclasse global que afeta todos os botões na plataforma. Após essa descoberta, você cria uma classe orfã exclusivamente para aquele botão ou insere os estilos inline.&lt;/p&gt;

&lt;p&gt;Nesse meio tempo, o Brasil poderia muito bem ter sofrido 7 gols da Alemanha novamente e você ainda não finalizou essa mudança. Diferentemente do 7–1 do Brasil X Alemanhã, o Padrão 7–1 do SASS pode…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/yagopeixinho/padrao-7-1-sass" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h3&gt;
  
  
  Base
&lt;/h3&gt;

&lt;p&gt;A pasta &lt;code&gt;base/&lt;/code&gt; contém estilos básicos e padrões para o projeto. Aqui você pode encontrar um arquivo &lt;code&gt;_reset.scss&lt;/code&gt; e possivelmente uma folha de estilo como &lt;code&gt;_base.scss&lt;/code&gt;, que cuida de estilos para toda a aplicação.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layout
&lt;/h3&gt;

&lt;p&gt;Na pasta &lt;code&gt;layout/&lt;/code&gt; estão os estilos para o layout da aplicação. Isso inclui folhas de estilo padrão como &lt;code&gt;_header.scss&lt;/code&gt;, &lt;code&gt;_footer.scss&lt;/code&gt;, &lt;code&gt;_sidebar.scss&lt;/code&gt;, bem como estilos relacionados ao layout, como grades e contêineres.&lt;/p&gt;

&lt;h3&gt;
  
  
  Components
&lt;/h3&gt;

&lt;p&gt;A pasta &lt;code&gt;components/&lt;/code&gt; é dedicada aos componentes que podem ser reutilizados nas páginas. Exemplos de componentes incluem &lt;code&gt;button.scss&lt;/code&gt;, &lt;code&gt;modals.scss&lt;/code&gt;, &lt;code&gt;cards.scss&lt;/code&gt;. É importante notar a diferença entre Components e &lt;code&gt;Layout&lt;/code&gt;. Enquanto o &lt;code&gt;Layout&lt;/code&gt; trata dos layouts globais da página, a pasta &lt;code&gt;Components&lt;/code&gt; lida com componentes menores e reutilizáveis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pages
&lt;/h3&gt;

&lt;p&gt;A pasta &lt;code&gt;pages/&lt;/code&gt; contém estilos específicos para páginas individuais. Por exemplo, você pode encontrar um arquivo de estilo como &lt;code&gt;_home.scss&lt;/code&gt; ou &lt;code&gt;_login.scss&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Themes
&lt;/h3&gt;

&lt;p&gt;Para aplicações maiores que requerem suporte a vários temas, a estrutura reserva uma pasta para esses temas. Aqui você pode incluir estilos para diferentes temas utilizados na aplicação.&lt;/p&gt;

&lt;h3&gt;
  
  
  Abstract
&lt;/h3&gt;

&lt;p&gt;A pasta &lt;code&gt;abstract/&lt;/code&gt; lida com todas as ferramentas e utilitários do SASS que podem ser utilizados em todo o projeto. Isso inclui arquivos como &lt;code&gt;_variables.scss&lt;/code&gt;, &lt;code&gt;_mixins.scss&lt;/code&gt;, &lt;code&gt;_functions.scss&lt;/code&gt;, entre outros.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vendors
&lt;/h3&gt;

&lt;p&gt;Na pasta &lt;code&gt;vendors/&lt;/code&gt; estão contidos conteúdos externos, como CSS de bibliotecas ou frameworks externos, por exemplo, Normalize, Bootstrap, JQueryUI, etc. Os arquivos de inclusão desses estilos podem ser nomeados como &lt;code&gt;_normalize.scss&lt;/code&gt;, &lt;code&gt;_bootstrap.scss&lt;/code&gt;, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Entendemos para que servem as 7 pastas. Vamos entender sobre o ficheiro principal?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  main.scss
&lt;/h3&gt;

&lt;p&gt;O ficheiro principal (normalmente chamado de &lt;code&gt;_main.scss&lt;/code&gt;) também sendo o único ficheiro que não possui underscore.&lt;/p&gt;

&lt;p&gt;Nesse ficheiro não deve conter nada além de imports de outros ficheiros - Isto pois, é importante preservarmos a legibilidade no ficheiro principal.&lt;/p&gt;

&lt;p&gt;Para preservar a legibilidade, o arquivo principal deve respeitar estas diretrizes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Um arquivo por &lt;em&gt;&lt;a class="mentioned-user" href="https://dev.to/import"&gt;@import&lt;/a&gt;&lt;/em&gt;;&lt;/li&gt;
&lt;li&gt;Um &lt;em&gt;&lt;a class="mentioned-user" href="https://dev.to/import"&gt;@import&lt;/a&gt;&lt;/em&gt; por linha;&lt;/li&gt;
&lt;li&gt;Sem nova linha entre dois &lt;em&gt;@imports&lt;/em&gt; da mesma pasta;&lt;/li&gt;
&lt;li&gt;Uma nova linha após o último &lt;em&gt;&lt;a class="mentioned-user" href="https://dev.to/import"&gt;@import&lt;/a&gt;&lt;/em&gt; de uma pasta;&lt;/li&gt;
&lt;li&gt;Extensões de arquivo e &lt;em&gt;underscores&lt;/em&gt; iniciais omitidos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Abaixo vemos um exemplo de um arquivo main.scss&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="cm"&gt;/********************
** Abstracts **/&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s2"&gt;"./abstracts/mixins"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/********************
** Base **/&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s2"&gt;"./base/reset"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/********************
** Components **/&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s2"&gt;"./components/dialogs"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s2"&gt;"./components/inputs"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/********************
** Layout **/&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s2"&gt;"./layout/header"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s2"&gt;"./layout/sidebar"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/********************
** Pages **/&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s2"&gt;"./pages/login"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/********************
** Themes **/&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s2"&gt;"./themes/default"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/********************
** Vendors **/&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s2"&gt;"./vendors/normalize"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para ver mais desse código, &lt;a href="https://github.com/yagopeixinho/sass-7-1-pattern" rel="noopener noreferrer"&gt;clique aqui&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Estrutura final de um projeto com o Padrão 7–1
&lt;/h2&gt;

&lt;p&gt;A seguir, apresento um exemplo de estrutura de arquivos seguindo o Padrão 7–1 do SASS. É evidente que cada arquivo está devidamente posicionado em sua respectiva pasta. A organização e a divisão de pastas são intuitivas e facilitam a compreensão da estrutura.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sass/
|
|– base/
|   |– _reset.scss       # Reset/normalização
|   |– _typography.scss  # Regras de tipografia
|   ...                  # Etc...
|
|– components/
|   |– _buttons.scss     # Botões
|   |– _carousel.scss    # Carrossel
|   |– _dropdown.scss    # Dropdown
|   ...                  # Etc...
|
|– layout/
|   |– _navigation.scss  # Navegação
|   |– _grid.scss        # Sistema de grid
|   |– _header.scss      # Cabeçalho
|   |– _footer.scss      # Rodapé
|   |– _sidebar.scss     # Barra lateral
|   |– _forms.scss       # Formulários
|   ...                  # Etc...
|
|– pages/
|   |– _home.scss        # Estilos específicos para a página inicial
|   |– _contact.scss     # Estilos específicos para a página de contato
|   ...                  # Etc...
|
|– themes/
|   |– _theme.scss       # Tema padrão
|   |– _admin.scss       # Tema de administração
|   ...                  # Etc...
|
|– utils/
|   |– _variables.scss   # Variáveis Sass
|   |– _functions.scss   # Funções Sass
|   |– _mixins.scss      # Mixins Sass
|   |– _helpers.scss     # Auxiliares de classes e placeholders
|
|– vendors/
|   |– _bootstrap.scss   # Bootstrap
|   |– _jquery-ui.scss   # jQuery UI
|   ...                  # Etc...
|
|
`– main.scss             # Arquivo principal do SASS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Ao adotar o &lt;strong&gt;Padrão 7–1 do SASS&lt;/strong&gt;, os desenvolvedores não apenas organizam seus projetos de forma eficiente, mas também estabelecem um método claro e intuitivo de gerenciar seus estilos.&lt;/p&gt;

&lt;p&gt;Assim como a Branca de Neve é acompanhada pelos 7 anões, o arquivo principal de estilo main.scss também é acompanhado por suas 7 pastas, cada uma com suas próprias responsabilidades e especificidades, da mesma forma que cada anão tem suas características únicas.&lt;/p&gt;

&lt;p&gt;Mantenha suas pastas estruturadas, e seu código  organizado :)&lt;/p&gt;

</description>
      <category>sass</category>
      <category>patternsass</category>
      <category>webdev</category>
      <category>scss</category>
    </item>
  </channel>
</rss>
