projeto de api

This commit is contained in:
Gabriel Almeida Bueno 2025-03-03 17:22:28 -03:00
parent 6d42b4b575
commit 184d280e8d
24 changed files with 277 additions and 16 deletions

View File

@ -7,6 +7,9 @@
"": { "": {
"name": "material-sistemas-distribuidos", "name": "material-sistemas-distribuidos",
"version": "0.0.1", "version": "0.0.1",
"dependencies": {
"highlight.js": "^11.11.1"
},
"devDependencies": { "devDependencies": {
"@sveltejs/adapter-auto": "^4.0.0", "@sveltejs/adapter-auto": "^4.0.0",
"@sveltejs/adapter-static": "^3.0.8", "@sveltejs/adapter-static": "^3.0.8",
@ -1093,6 +1096,15 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0" "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
} }
}, },
"node_modules/highlight.js": {
"version": "11.11.1",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz",
"integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/import-meta-resolve": { "node_modules/import-meta-resolve": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",

View File

@ -20,5 +20,8 @@
"svelte-check": "^4.0.0", "svelte-check": "^4.0.0",
"typescript": "^5.0.0", "typescript": "^5.0.0",
"vite": "^6.0.0" "vite": "^6.0.0"
},
"dependencies": {
"highlight.js": "^11.11.1"
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

View File

@ -1,5 +1,6 @@
a { a {
color: var(--color-fg); background-color: var(--color-anchor-bg);
color: var(--color-anchor-fg);
text-decoration: underline; text-decoration: underline;
cursor: pointer; cursor: pointer;
} }

View File

@ -23,4 +23,8 @@ code {
em { em {
font-style: italic; font-style: italic;
}
b {
font-weight: bold;
} }

View File

@ -4,6 +4,9 @@
--color-bg: #fff5ee; --color-bg: #fff5ee;
--color-fg: #1c1c1c; --color-fg: #1c1c1c;
--color-anchor-bg: unset;
--color-anchor-fg: black;
--color-kbd-bg: beige; --color-kbd-bg: beige;
--color-kbd-fg: var(--color-fg); --color-kbd-fg: var(--color-fg);
--color-kbd-border: lightgray; --color-kbd-border: lightgray;
@ -20,8 +23,9 @@
/* --color-bg: #1c1c1c; /* --color-bg: #1c1c1c;
--color-fg: #fff5ee; */ --color-fg: #fff5ee; */
--font-serif: "Georgia", "serif"; --font-serif: "Georgia", serif;
--font-mono: "Monaco", "Menlo"; --font-sans: sans-serif;
--font-mono: "Monaco", "Menlo", "Consolas", monospace;
--heading1-size: 32px; --heading1-size: 32px;
--heading2-size: 26px; --heading2-size: 26px;

View File

@ -6,7 +6,10 @@
import "../css/anchor.css"; import "../css/anchor.css";
import "../css/list.css"; import "../css/list.css";
import "../css/img.css"; import "../css/img.css";
import "../css/code.css" import "../css/code.css";
import hljs from "highlight.js/lib/core";
import xml from "highlight.js/lib/languages/xml";
let { children } = $props(); let { children } = $props();
</script> </script>

View File

@ -25,14 +25,18 @@
<ol> <ol>
<li><a href="/intro">Introdução</a></li> <li><a href="/intro">Introdução</a></li>
<li><a href="/windows">Preparação do ambiente no Windows</a></li> <li><a href="/windows">Preparação do ambiente no Windows</a></li>
<li><a href="/linux">Preparação do ambiente no Linux</a></li> <!-- <li><a href="/linux">Preparação do ambiente no Linux</a></li>
<li><a href="/macos">Preparação do ambiente no MacOS</a></li> <li><a href="/macos">Preparação do ambiente no MacOS</a></li> -->
<li><a href="/vscode">Breve introdução ao Visual Studio Code</a></li> <li><a href="/vscode">Breve introdução ao Visual Studio Code</a></li>
<li><a href="/criando_o_projeto">Criando o projeto da API</a></li> <li><a href="/projeto_de_api">Projeto de API: Biblioteca</a></li>
<li><a href="/o_que_e_uma_api">O que é uma API, afinal de contas?</a></li>
<ol> <ol>
<li><a href="/o_que_e_uma_api#http">Anatomia de uma requisição HTTP</a></li> <li><a href="/criacao_do_projeto">Criação do projeto</a></li>
<li><a href="/o_que_e_uma_api#rest">A arquitetura REST</a></li> <li><a href="/estrutura_de_arquivos">Estrutura de arquivos</a></li>
<li>Conectando com o banco de dados</li>
<li>Mantendo livros</li>
<li>Emprestando livros</li>
<li>Sobre o protocolo HTTP</li>
<li>A arquitetura REST</li>
</ol> </ol>
</ol> </ol>
</nav> </nav>

View File

@ -0,0 +1,173 @@
<script>
import VscCsharpDevKit from "../../assets/img/26_vsc_csharp_devkit.png";
import VscCmdNovoProjeto from "../../assets/img/27_vsc_cmd_novo_projeto.png";
import VscCmdProjType from "../../assets/img/28_vsc_cmd_proj_type.png";
import VscCmdProjName from "../../assets/img/29_vsc_cmd_proj_name.png";
import VscCmdProjDir from "../../assets/img/30_vsc_cmd_proj_dir.png";
import VscCmdProjConfirm from "../../assets/img/31_vsc_cmd_proj_confirm.png";
import VscCmdProjCriado from "../../assets/img/32_vsc_cmd_projeto_criado.png";
import VscCmdGenerateAssetsForDebug from "../../assets/img/33_vsc_cmd_generate_assets_for_debug.png";
import VscCmdDebuggerSemConfig from "../../assets/img/34_vsc_debugger_sem_config.png";
import VscCmdDebuggerComConfig from "../../assets/img/35_vsc_debugger_com_config.png";
import VscCmdDebuggerExecutando from "../../assets/img/36_vsc_debugger_executando.png";
</script>
<svelte:head>
<title>Criação do projeto</title>
</svelte:head>
<section>
<h1>Criação do projeto</h1>
<nav>
<a href="/">Início</a>
</nav>
<p>
Vamos criar o projeto para a API da nossa biblioteca. Na seção <a href="/vscode" target="_blank">Breve introdução ao Visual Studio Code</a>, fizemos isso utilizando o terminal, apenas para testarmos se a instalação do .NET
estava correta. Agora, vamos utilizar a <em>extensão do C# para o VSCode</em> para criar um novo projeto.
</p>
<h2>Criação e configuração do projeto</h2>
<p>
Assim como fizemos em <a href="/vscode" target="_blank">Breve introdução ao Visual Studio Code</a>, crie uma pasta vazia em algum lugar no seu computador, e abra no VSCode. Com a pasta aberta,
na barra lateral, abra a aba de extensões, e pesquise por <em>"C#"</em>.
</p>
<div>
<img src={VscCsharpDevKit} alt="">
</div>
<p>
Algumas opções aparecerão. Instale a extensão <a href="https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit" target="_blank">C# DevKit</a>.
</p>
<p>
Após instalado, feche a aba de extensões, e, no seu teclado, aperte <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>p</kbd> (<kbd></kbd>+<kbd>Shift</kbd>+<kbd>p</kbd>).
Uma janela deve aparecer na parte superior do editor. Esta janela é um <a target="_blank" href="https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette">seletor de comandos</a>
do Visual Studio Code, onde você pode acessar as diversas funcionalidades do editor.
</p>
<p>
A extensão do <em>C# DevKit</em> adiciona alguns comandos, incluindo um comando para a criação de projetos (tal como fizemos via terminal na seção anterior). Escreva <em>new project</em> para
pesquisar o comando correto, selecione <code>.NET: New Project</code>, e aperte <kbd>Enter</kbd> para prosseguir.
</p>
<div>
<img src={VscCmdNovoProjeto} alt=""/>
</div>
<p>
Na próxima janela, várias opções de tipos de projeto serão apresentadas. Queremos criar uma <em>api web</em>, portanto, devemos selecionar a opção <code>API Web do ASP.NET Core</code>.
</p>
<div>
<img src={VscCmdProjType} alt=""/>
</div>
<p>
Em seguida, será pedido o nome do projeto. Escreva <em>"Biblioteca"</em>, e aperte <kbd>Enter</kbd> para prosseguir.
</p>
<div>
<img src={VscCmdProjName} alt=""/>
</div>
<p>
O diretório onde você deseja criar o projeto será perguntado. Como já estamos na pasta vazia onde queremos que o projeto seja criado,
deixe a opção <code>Default directory</code> selecionada e aperte <kbd>Enter</kbd> para ir para o próximo passo.
</p>
<div>
<img src={VscCmdProjDir} alt=""/>
</div>
<p>
Podemos definir algumas configurações iniciais para o projeto. Não queremos nada diferente do padrão, inicialmente, então deixe a opção <code>Create project</code> selecionada e aperte <kbd>Enter</kbd> novamente para criar o projeto.
</p>
<div>
<img src={VscCmdProjConfirm} alt=""/>
</div>
<p>
Agora, observe o explorador de arquivos do VSCode.
</p>
<div>
<img src={VscCmdProjCriado} alt=""/>
</div>
<p>
Você deve ter a seguinte estrutura de diretórios, se tudo ocorreu corretamente:
</p>
<ul>
<li>
<code>Biblioteca.WebApi/</code>
</li>
<li>
<code>Biblioteca.sln</code>
</li>
</ul>
<p>
Este mesmo processo de criação poderia ter sido realizado no terminal com o seguintes comandos:
</p>
<pre><code>dotnet new webapi -n Biblioteca
dotnet new sln -n Biblioteca
dotnet sln add Biblioteca.WebApi</code></pre>
<p>
Para finalizar, vamos configurar o depurador. Abra a aba do depurador na barra lateral. Você deverá ver algo como:
</p>
<div>
<img src={VscCmdDebuggerSemConfig} alt=""/>
</div>
<p>
O depurador ainda não está configurado e enxergando o nosso projeto. Para que isso aconteça,
abra o seletor de comandos mais uma vez (<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>p</kbd> ou <kbd></kbd>+<kbd>Shift</kbd>+<kbd>p</kbd>), escolha
a opção <code>.NET: Generate Assets for Build and Debug</code> e aperte <kbd>Enter</kbd>.
</p>
<div>
<img src={VscCmdGenerateAssetsForDebug} alt=""/>
</div>
<p>
Este comando irá alterar alguns arquivos de configuração para que
o VSCode entenda qual projeto deve ser executado. Se tudo deu certo, a aba do
depurador agora irá ser exibida desta forma:
</p>
<div>
<img src={VscCmdDebuggerComConfig} alt=""/>
</div>
<p>
Clique no botão de executar o projeto (ou aperte <kbd>F5</kbd>).
</p>
<div>
<img src={VscCmdDebuggerExecutando} alt="">
</div>
<p>
A API está sendo executada agora. Observe uma nova seção que apareceu na parte superior da janela com alguns botões. Estes botões são controles do depurador
que veremos com detalhes mais tarde. Para parar de executar, clique no botão com o quadrado com contorno vermelho.
</p>
<p>
Nos próximos passos, vamos explorar os arquivos que foram criados pelo .NET dentro de <code>Biblioteca/</code>. Vamos finalizar algumas configurações simples e, finalmente,
vamos começar a escrever código.
</p>
<nav>
<span>Próximo passo:</span>
<a href="/estrutura_de_arquivos">Estrutura de arquivos</a>
</nav>
</section>

View File

@ -1 +0,0 @@
<p>em desenvolvimento</p>

View File

@ -0,0 +1,21 @@
<h2>em desenvolvimento</h2>
<p>
Estes arquivos foram criados pelos comandos que você colou no terminal.
O primeiro comando cria um projeto do tipo <code>webapi</code> com o nome <code>Biblioteca.WebApi</code>. O segundo comando cria uma <em>solução</em> com o nome <code>Biblioteca</code>.
O terceiro comando adiciona o projeto <code>Biblioteca.WebApi</code> à solução <code>Biblioteca</code>.
</p>
<p>
No dotnet, um arquivo de solução é um arquivo com extensão .sln que define uma coleção de <em>projetos</em>. Este arquivo é o ponto de entrada utilizado pela IDE para navegar pelo seu código e disponibilizar
as suas ferramentas, como o intellisense e o debugger.
</p>
<p>
Uma solução pode ter vários projetos, e é bem comum ver aplicações em dotnet que utilizam pelo menos dois. Mas não precisamos nos preocupar com isso agora. Apenas devemos criar uma solução para
fazer o VSCode ler o projeto corretamente.
</p>
<p>
</p>

View File

@ -42,8 +42,8 @@
<nav> <nav>
<ol> <ol>
<li><a href="/windows">Preparação do ambiente no Windows</a></li> <li><a href="/windows">Preparação do ambiente no Windows</a></li>
<li><a href="/linux">Preparação do ambiente no Linux</a></li> <!-- <li><a href="/linux">Preparação do ambiente no Linux</a></li>
<li><a href="/macos">Preparação do ambiente no MacOS</a></li> <li><a href="/macos">Preparação do ambiente no MacOS</a></li> -->
</ol> </ol>
</nav> </nav>
</section> </section>

View File

@ -0,0 +1,33 @@
<svelte:head>
<title>Projeto de API: Biblioteca</title>
</svelte:head>
<section>
<h1>Projeto de API: Biblioteca</h1>
<nav>
<a href="/">Início</a>
</nav>
<p>
Imagine que você foi escolhido para desenvolver um sistema de informação para a <b>biblioteca</b> da sua faculdade. Os usuários deste sistema serão
os funcionários que o utilizarão para gerenciar a biblioteca. Os usuários devem ser capazes de <b>visualizar</b>, <b>cadastrar</b>, <b>editar</b>
e <b>remover</b> os <b>livros</b> que estão disponíveis, além
de registrar quando um livro foi <b>emprestado</b> para um <b>aluno</b>. Para isso, vamos desenvolver uma API que irá expor <em>endpoints</em> para cada uma destas operações:
</p>
<ul>
<li><b>Visualizar</b> os livros da biblioteca disponíveis no sistema.</li>
<li><b>Cadastrar</b>, <b>editar</b> e <b>remover</b> livros no sistema.</li>
<li><b>Emprestar</b> um livro para um aluno.</li>
</ul>
<p>
Antes de tudo, devemos criar o projeto. Vamos fazer isso no próximo passo.
</p>
<nav>
<span>Próximo passo:</span>
<a href="/criacao_do_projeto">Criação do projeto</a>
</nav>
</section>

View File

@ -194,17 +194,21 @@
<div><img src={ImgVscDotnetRun} alt=""/></div> <div><img src={ImgVscDotnetRun} alt=""/></div>
<p> <p>
Como manda a tradição, a saída apresentará: A saída apresentará:
</p> </p>
<pre><code>Hello, World!</code></pre> <pre><code>Hello, World!</code></pre>
<p> <p>
Se você vê esta mensagem no seu terminal, então estamos prontos para prosseguir. Vamos agora criar um novo projeto de API. Se você vê esta mensagem no seu terminal, então estamos prontos para prosseguir. Na próxima seção, vamos enfim criar um projeto de API.
</p>
<p>
Para mais detalhes sobre o funcionamento do VSCode, leia o <a href="https://code.visualstudio.com/docs/getstarted/userinterface" target="_blank">guia oficial</a> do editor.
</p> </p>
<nav> <nav>
<span>Próximo passo:</span> <span>Próximo passo:</span>
<a href="/criando_o_projeto">Criando o projeto da API</a> <a href="/projeto_de_api">Projeto de API: Biblioteca</a>
</nav> </nav>
</section> </section>