<?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: Sabrina Barros</title>
    <description>The latest articles on DEV Community by Sabrina Barros (@sabrinabarros).</description>
    <link>https://dev.to/sabrinabarros</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%2F573801%2Ff49508b6-810d-40f9-a8ed-69133434ada7.JPG</url>
      <title>DEV Community: Sabrina Barros</title>
      <link>https://dev.to/sabrinabarros</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sabrinabarros"/>
    <language>en</language>
    <item>
      <title>Conheça Next.js 14: O Framework Full-Stack para Aplicações Web Modernas</title>
      <dc:creator>Sabrina Barros</dc:creator>
      <pubDate>Thu, 03 Oct 2024 23:10:36 +0000</pubDate>
      <link>https://dev.to/sabrinabarros/conheca-nextjs-14-o-framework-full-stack-para-aplicacoes-web-modernas-1e67</link>
      <guid>https://dev.to/sabrinabarros/conheca-nextjs-14-o-framework-full-stack-para-aplicacoes-web-modernas-1e67</guid>
      <description>&lt;p&gt;Idealizado por Guillermo Rauch, com a primeira versão lançada em 2016 pela Vercel, o &lt;strong&gt;Next.js&lt;/strong&gt; veio com um objetivo: ser um framework web full-stack de código aberto, fácil e eficiente de ser usado.&lt;/p&gt;

&lt;p&gt;Desde então o &lt;strong&gt;Next.js&lt;/strong&gt; se estabeleceu como um dos frameworks mais populares para web &lt;em&gt;apps&lt;/em&gt;. Seu foco é fornecer ferramentas eficientes, especialmente para quem já utiliza &lt;strong&gt;React&lt;/strong&gt;, tendo em vista que o framework utiliza de &lt;strong&gt;React components&lt;/strong&gt; para renderizar o front-end, o que facilita muito a adesão ao &lt;strong&gt;Next.js&lt;/strong&gt;, considerando a grande popularidade do React entre a comunidade.&lt;/p&gt;

&lt;p&gt;Neste artigo vou abordar o &lt;strong&gt;Next.js 14&lt;/strong&gt;, a versão mais recente e atualizada.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primeiras coisas primeiro
&lt;/h2&gt;

&lt;p&gt;Para podermos alinhar o conhecimento de quem está lendo este artigo e não assumir que você caro leitor já sabe o que tais jargões significam, eu vou dar uma breve introdução para você:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Layout Shift&lt;/strong&gt;: Se refere a mudanças inesperadas no layout da página, que ocorrem quando elementos como imagens, vídeos, fontes ou anúncios, são carregados ou redimensionados &lt;strong&gt;após&lt;/strong&gt; o conteúdo já ter sido renderizado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lazy Loading&lt;/strong&gt;: Técnica de otimização usada para adiar o carregamento de conteúdo não essencial de uma página até que ele seja realmente necessário, como quando o usuário rola a página até esse conteúdo. Isso melhora a performance inicial da página e a experiência do usuário, pois apenas os elementos visíveis ou prioritários são carregados imediatamente.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  O Que é o Next.js?
&lt;/h2&gt;

&lt;p&gt;Objetivamente, o &lt;strong&gt;Next.js&lt;/strong&gt; é um framework para construir aplicações full-stack para Web, com muitas funcionalidades que otimizam o desenvolvimento, tanto no lado do cliente quanto do servidor. Ele facilita a criação de aplicações web com qualidade, renderização eficiente e estrutura organizada.&lt;/p&gt;

&lt;p&gt;Ele utiliza de &lt;strong&gt;React Components&lt;/strong&gt; para renderização da interface, e complementa a aplicação com features adicionais e otimização, além de proporcionar todo o ambiente para o desenvolvimento da aplicação, do &lt;em&gt;client&lt;/em&gt; ao banco de dados.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Next.js&lt;/strong&gt; permite criar tanto o &lt;strong&gt;front-end&lt;/strong&gt; quanto o &lt;strong&gt;back-end&lt;/strong&gt; em um único ambiente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principais Características
&lt;/h3&gt;

&lt;p&gt;A versão mais recente (&lt;em&gt;v14&lt;/em&gt;) do &lt;strong&gt;Next.js&lt;/strong&gt; traz inovações importantes, especialmente com a introdução do &lt;strong&gt;App Router&lt;/strong&gt; e &lt;strong&gt;Server-Side Components&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nos próximos artigos dessa série, vou abordar mais especificamente sobre como funciona o App Router e Server-Side Components.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As principais características incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;App Route&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O &lt;strong&gt;App Router&lt;/strong&gt; é a nova abordagem de roteamento no &lt;strong&gt;Next.js&lt;/strong&gt;, que aproveita ao máximo as funcionalidades mais recentes do &lt;strong&gt;React&lt;/strong&gt;, como &lt;strong&gt;Server Components&lt;/strong&gt; e &lt;strong&gt;Streaming de Dados&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Suporte a Server e Client Components:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com as versões mais recentes do &lt;strong&gt;Next.js&lt;/strong&gt;, surgiu uma abordagem diferenciada para lidar com a renderização de componentes, dividindo-os em &lt;strong&gt;Server Components&lt;/strong&gt; e &lt;strong&gt;Client Components&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Enquanto o &lt;strong&gt;Server Components&lt;/strong&gt; se trata de &lt;strong&gt;componentes React&lt;/strong&gt; que são renderizados exclusivamente (&lt;em&gt;e opcionalmente armazenadas em cache&lt;/em&gt;) no servidor, o &lt;strong&gt;Client Components&lt;/strong&gt; é pré-renderizado no servidor e pode usar &lt;strong&gt;JavaScript&lt;/strong&gt; do cliente para executar no navegador.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Otimização Automática de Código (&lt;em&gt;Code Splitting&lt;/em&gt;)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para melhorar a experiência de navegação, o &lt;strong&gt;Next.js&lt;/strong&gt; divide automaticamente o código do seu aplicativo por segmentos de rota, o chamado &lt;strong&gt;Code Splitting&lt;/strong&gt;, melhorando a performance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Route Handlers&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Route Handlers&lt;/strong&gt; é o substituto da antiga &lt;strong&gt;API Routes&lt;/strong&gt; do &lt;strong&gt;Next.js&lt;/strong&gt;, essa funcionalidade permite manipular requisições para uma rota específica usando as APIs da Web &lt;strong&gt;Request&lt;/strong&gt; e &lt;strong&gt;Response&lt;/strong&gt;. O que elimina a necessidade de um servidor back-end separado.&lt;/p&gt;

&lt;h2&gt;
  
  
  React e Next.js: Diferenças e Complementaridades
&lt;/h2&gt;

&lt;p&gt;Neste momento é provável existir um vulto na sua cabeça sobre como separar o &lt;strong&gt;React&lt;/strong&gt; do &lt;strong&gt;Next.js&lt;/strong&gt;. Embora ambos sejam usados juntos, é importante entender suas funções distintas.&lt;/p&gt;

&lt;p&gt;Enquanto o &lt;strong&gt;React&lt;/strong&gt; é uma biblioteca focada na construção de interfaces de usuário (UI) com componentes reutilizáveis, o &lt;strong&gt;Next.js&lt;/strong&gt; vai além e adiciona ferramentas e funcionalidades que facilitam o desenvolvimento full-stack. Entre essas funcionalidades está a geração de rotas automáticas e integração fácil com ferramentas de monitoramento e segurança.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fk8an1amrh14mls4xqqlf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fk8an1amrh14mls4xqqlf.png" alt="Escopo de uma aplicação com Next.js"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em resumo, o React cuida da interface, enquanto o Next.js fornece as ferramentas adicionais para otimização e gerenciamento da aplicação como um todo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vantagens do Next.js
&lt;/h2&gt;

&lt;p&gt;Historicamente, os desenvolvedores tiveram que usar diferentes linguagens (por exemplo, &lt;strong&gt;JavaScript&lt;/strong&gt;, &lt;strong&gt;PHP&lt;/strong&gt;, &lt;strong&gt;Ruby&lt;/strong&gt;) e estruturas ao escrever código para o servidor e o cliente. Atualmente, os desenvolvedores podem usar a mesma linguagem (&lt;strong&gt;JavaScript&lt;/strong&gt;) e a mesma estrutura (por exemplo, &lt;strong&gt;Next.js&lt;/strong&gt;). Essa premissa permite escrever código perfeitamente para ambos os ambientes, &lt;strong&gt;sem alternância de contexto&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Isso por si só valida os benefícios de se usar uma ferramenta como o &lt;strong&gt;Next.js&lt;/strong&gt;, mas ele não é a única estrutura que resolve o problema de alternância de contexto, que devo dizer, essa é uma discussão muito mais antiga do que o próprio &lt;strong&gt;Next.js&lt;/strong&gt; em si, então vamos às especificidades que fazem do &lt;strong&gt;Next.js&lt;/strong&gt; ser de fato vantajoso:&lt;/p&gt;

&lt;p&gt;1. &lt;strong&gt;Otimização Automática de Código:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Além do já citado &lt;strong&gt;code splitting&lt;/strong&gt;, que faz a divisão automática de código, o &lt;strong&gt;Next.js&lt;/strong&gt; automaticamente aplica &lt;strong&gt;lazy loading&lt;/strong&gt; para Client Components. O lazy loading ajuda a melhorar o desempenho de carregamento inicial de um app diminuindo a quantidade de JavaScript necessária para renderizar uma rota.&lt;/p&gt;

&lt;p&gt;2. &lt;strong&gt;Sistema de Rotas Simplificado&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Rotas baseadas em pastas e arquivos, o que para mim, pessoalmente, simplificou a configuração e estruturação do projeto.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O suporte tanto ao &lt;strong&gt;App Router&lt;/strong&gt; (&lt;em&gt;moderno&lt;/em&gt;) quanto ao &lt;strong&gt;Page Router&lt;/strong&gt; (&lt;em&gt;legado&lt;/em&gt;) continua.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;3. &lt;strong&gt;Suporte Nativo a TypeScript&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Transição fácil para TypeScript, sem a necessidade de configuração manual.&lt;/p&gt;

&lt;p&gt;4. &lt;strong&gt;Otimizações de Imagem&lt;/strong&gt; &lt;code&gt;next/image&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;O componente &lt;code&gt;&amp;lt;Image&amp;gt;&lt;/code&gt; é uma extensão da tag &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; que vem automaticamente com otimização de imagens.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Previne mudança de layout “&lt;strong&gt;Layout Shift&lt;/strong&gt;” automaticamente quando as imagens são carregadas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Redimensiona imagens para impedir imagens grandes demais em dispositivos com uma viewport menor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faz &lt;strong&gt;lazy loading&lt;/strong&gt; por padrão (as imagens são carregadas à medida que entram na viewport).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;5. &lt;strong&gt;Otimizações de Fonte&lt;/strong&gt; &lt;code&gt;next/fonte&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Next.js&lt;/strong&gt; otimiza automaticamente as fontes, baixando-as durante o processo de build e hospedando juntamente com os outros assets estáticos.&lt;/p&gt;

&lt;p&gt;Isso significa que quando um usuário visita seu app, não há solicitações de rede adicionais para fontes que afetariam o desempenho, ou seja, &lt;strong&gt;zero Layout Shift&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;6. &lt;strong&gt;Renderização Dividida por Segmentos de Rota&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O processo de renderização é dividido em segmentos de rota, o que significa que diferentes partes da página podem ser renderizadas de maneira independente. Isso permite que a renderização aconteça de forma parcial e por streaming, o que melhora a experiência do usuário, pois partes da página podem ser exibidas à medida que ficam prontas, sem a necessidade de esperar que a página inteira seja processada.&lt;/p&gt;

&lt;p&gt;7. &lt;strong&gt;Facilidade de Deploy na Vercel&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;A implantação no Vercel é de configuração zero, a integração direta com a plataforma faz com que deploys sejam rápidos e muito convenientes, com CI/CD (&lt;em&gt;Integração Contínua e Entrega Contínua&lt;/em&gt;) bastante simplificada.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como Começar um projeto Next.js
&lt;/h2&gt;

&lt;p&gt;Uma das vantagens do &lt;strong&gt;Next.js&lt;/strong&gt; é a sua simplicidade de configuração. Criar um novo projeto é rápido e direto:&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="nv"&gt;$ &lt;/span&gt;npx create-next-app@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.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%2Fmxnqkwy8fi0ur6spavj9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fmxnqkwy8fi0ur6spavj9.gif" alt="Inicializando um projeto Next.js no terminal."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esse comando inicializa um projeto com todas as configurações necessárias para começar a desenvolver imediatamente, configurando o ambiente e instalando dependências básicas.&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="nv"&gt;$ &lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E seu projeto estará rodando por padrão na porta 3000: &lt;code&gt;http://localhost:3000&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F63gft5kzxya8icf0uosw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F63gft5kzxya8icf0uosw.png" alt="Projeto Next.js rodando no navegador."&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Esse artigo teve como objetivo cobrir os aspectos principais do &lt;strong&gt;Next.js&lt;/strong&gt; e as novidades da &lt;strong&gt;versão 14&lt;/strong&gt;, onde é introduzido um conjunto muito interessante de funcionalidades que tornam o desenvolvimento web ainda mais eficiente e eleva a experiência do usuário.&lt;/p&gt;

&lt;p&gt;Por muito tempo o &lt;strong&gt;Next.js&lt;/strong&gt; foi visto simplesmente como "&lt;em&gt;o Framework para fazer SSR&lt;/em&gt;", espero ter conseguido mostrar que as possibilidades dessa ferramenta vão muito além.&lt;/p&gt;

&lt;p&gt;Parabéns para você! Por adquirir um novo conhecimento hoje.🎉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fmk4rsdjyl0my36mwdzee.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fmk4rsdjyl0my36mwdzee.gif" alt="Plateia sorridente aplaudindo."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em breve estarei postando a sequência dessa série de artigos sobre Next.js ✨&lt;/p&gt;

&lt;p&gt;Te vejo lá!&lt;/p&gt;

&lt;h2&gt;
  
  
  Meus Links 🔗
&lt;/h2&gt;

&lt;p&gt;Se tiver dúvidas ou quiser trocar ideias, sinta-se à vontade para entrar em contato!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sabrinabarros.github.io/" rel="noopener noreferrer"&gt;Meu Site Pessoal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SabrinaBarros" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/saazbarros/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/DevSaaz/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SabrnaBarrosDev" rel="noopener noreferrer"&gt;Falecido Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nextjs.org/docs" rel="noopener noreferrer"&gt;Next.js - Documentação Oficial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nextjs.org/learn/dashboard-app/navigating-between-pages" rel="noopener noreferrer"&gt;Next.js - Navigating Between Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Code_splitting" rel="noopener noreferrer"&gt;MDN Web Docs - Code Splitting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>nextjs</category>
      <category>fullstack</category>
      <category>react</category>
      <category>node</category>
    </item>
    <item>
      <title>Server-Side Rendering (SSR): Uma Solução para SEO e Performance em Aplicações React</title>
      <dc:creator>Sabrina Barros</dc:creator>
      <pubDate>Tue, 24 Sep 2024 00:21:38 +0000</pubDate>
      <link>https://dev.to/sabrinabarros/server-side-rendering-ssr-uma-solucao-para-seo-e-performance-em-aplicacoes-react-1ap1</link>
      <guid>https://dev.to/sabrinabarros/server-side-rendering-ssr-uma-solucao-para-seo-e-performance-em-aplicacoes-react-1ap1</guid>
      <description>&lt;p&gt;Server-Side Rendering (&lt;strong&gt;SSR&lt;/strong&gt;) ou Renderização do Lado do Servidor, é o processo de renderizar uma aplicação web no servidor antes de enviá-la ao navegador. Este método foi desenvolvido para resolver problemas de SEO (&lt;em&gt;Search Engine Optimization&lt;/em&gt;) que surgem ao utilizar frameworks JavaScript como o React e performance num geral.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: Vou usar o React.js como exemplo nesse artigo, mas tudo que foi dito aqui se aplica para outras bibliotecas (Angular, Vue etc…) também, fechou? 😉👍&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Entendendo o Problema
&lt;/h2&gt;

&lt;p&gt;Para compreender o papel do &lt;strong&gt;SSR&lt;/strong&gt;, é essencial entender como o React funciona na renderização de páginas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Abertura do Site pelo Usuário&lt;/strong&gt;: Quando um usuário clica para abrir um site feito com React, o navegador inicia o processo de carregar a página.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Download do HTML Inicial&lt;/strong&gt;: O navegador baixa o HTML básico do site. Se você já trabalhou com React, sabe que este HTML geralmente contém apenas um &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; e uma &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; com o &lt;code&gt;id&lt;/code&gt; &lt;code&gt;root&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Carregamento e Execução do JavaScript&lt;/strong&gt;: O navegador, em seguida, baixa e executa o JavaScript que realmente contém todo o conteúdo e a lógica da aplicação. A partir disso, o DOM (&lt;em&gt;Document Object Model&lt;/em&gt;) é montado.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fb0s5nq9p8x8u9xwo3mxr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fb0s5nq9p8x8u9xwo3mxr.png" alt="Exemplo de requisição web onde o servidor retorna um HTML simples sem conteúdo." width="600" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esse processo, no entanto, cria um problema significativo para o &lt;strong&gt;SEO&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  O Problema de SEO com Aplicações React
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;SEO (&lt;em&gt;Search Engine Optimization&lt;/em&gt;)&lt;/strong&gt;, ou Otimização para Motores de Busca, é o conjunto de técnicas e estratégias que visam melhorar o posicionamento de um site nos resultados orgânicos de mecanismos de busca, como o Google. Um dos principais fatores que os motores de busca consideram ao indexar uma página é o conteúdo HTML.&lt;/p&gt;

&lt;p&gt;No caso de aplicações React tradicionais, o HTML enviado ao navegador é praticamente vazio. Como o SEO analisa o HTML inicial da página para determinar seu conteúdo e relevância, um HTML vazio resulta em uma indexação deficiente, prejudicando o posicionamento da página nos resultados de busca.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Solução: Server-Side Rendering (SSR)
&lt;/h2&gt;

&lt;p&gt;Para contornar o problema de &lt;strong&gt;SEO&lt;/strong&gt; em aplicações React, foi desenvolvida a técnica de &lt;strong&gt;Server-Side Rendering&lt;/strong&gt;. Com o &lt;strong&gt;SSR&lt;/strong&gt;, toda a aplicação em React é renderizada no servidor antes de ser enviada ao navegador. O processo funciona da seguinte maneira:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F59jhy9k5j47j9i7vkzsz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F59jhy9k5j47j9i7vkzsz.png" alt="Exemplo de requisição web onde o servidor retorna um HTML completo." width="600" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Requisição Inicial pelo Usuário&lt;/strong&gt;: O usuário clica para abrir o site.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Renderização no Servidor&lt;/strong&gt;: O servidor processa o JavaScript da aplicação e a partir dele, monta o HTML completo da página.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Envio do HTML Renderizado&lt;/strong&gt;: O servidor entrega o HTML já renderizado juntamente com o JavaScript necessário para interatividade no navegador do usuário.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Benefícios do SSR
&lt;/h3&gt;

&lt;p&gt;Além de resolver o problema de &lt;strong&gt;SEO&lt;/strong&gt;, o &lt;strong&gt;SSR&lt;/strong&gt; traz outras vantagens importantes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Melhoria de Performance&lt;/strong&gt;: Como o HTML já está pré-renderizado, o tempo de carregamento percebido pelo usuário é menor, o que proporciona uma experiência mais rápida e fluida. Isso é especialmente útil para usuários com dispositivos mais fracos ou conexões lentas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Aumento da Segurança&lt;/strong&gt;: Com o &lt;strong&gt;SSR&lt;/strong&gt;, minimiza ou até mesmo anula o acesso do front-end direto às APIs, ja que todas as requisições são feitas pelo lado do servidor antes que o usuário tenha acesso à página. Isso reduz a o risco de ataque para potenciais vulnerabilidades.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Desvantagens e Custos do SSR
&lt;/h3&gt;

&lt;p&gt;Apesar dos benefícios, o &lt;strong&gt;SSR&lt;/strong&gt; também apresenta alguns desafios, como o &lt;strong&gt;custo operacional&lt;/strong&gt;, manter um servidor ativo para realizar a renderização pode ser bem caro, especialmente em aplicações com um volume de tráfego muito grande. Serviços como Vercel, AWS, etc... Cobram pelo uso de recursos do servidor, o que pode aumentar significativamente os custos operacionais.&lt;/p&gt;

&lt;h2&gt;
  
  
  Opções para Implementar o SSR
&lt;/h2&gt;

&lt;p&gt;Existem várias maneiras de implementar o &lt;strong&gt;SSR&lt;/strong&gt;, dependendo das necessidades do projeto.&lt;/p&gt;

&lt;p&gt;Uma delas é o &lt;strong&gt;SSR Tradicional&lt;/strong&gt;, o servidor gera HTML para cada requisição, comum no &lt;strong&gt;PHP&lt;/strong&gt; e em frameworks como &lt;strong&gt;Ruby on Rails&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;React Server Components (RSC)&lt;/strong&gt; é um novo tipo de componente da versão &lt;strong&gt;19 do React&lt;/strong&gt; que é renderizado antecipadamente, antes do processo de &lt;em&gt;build&lt;/em&gt;, em um ambiente separado do navegador ou do &lt;strong&gt;servidor SSR&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Eu diria que talvez o &lt;em&gt;SSR Provider&lt;/em&gt; mais conhecido até então é o &lt;strong&gt;Next.js&lt;/strong&gt;, que renderiza o conteúdo no servidor e entrega HTML pronto para o navegador, melhorando &lt;strong&gt;SEO&lt;/strong&gt; e performance com menos esforço de configuração. Sendo esse o principal motivo para o &lt;strong&gt;Next.js&lt;/strong&gt; ser o framework escolhido, com as novas atualizações do &lt;strong&gt;React&lt;/strong&gt;, torna o futuro do &lt;strong&gt;Next.js&lt;/strong&gt; incerto. Mas antes, mais um &lt;em&gt;disclaimer&lt;/em&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Devo defender o Next.js, ele continua sendo uma ferramenta para construção de apps full-stack muito robusta, o React se atualizou e o Next.js também, e toda essa discussão sobre "&lt;em&gt;pra que usar next agora?&lt;/em&gt;🤪" me inspirou a escrever uma série de artigos sobre Next.js, você pode acessar o primeiro dessa sequencia aqui: &lt;a href="https://dev.to/sabrinabarros/conheca-nextjs-14-o-framework-full-stack-para-aplicacoes-web-modernas-1e67"&gt;Conheça Next.js 14: O Framework Full-Stack para Aplicações Web Modernas&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Get in Touch
&lt;/h2&gt;

&lt;p&gt;Obrigado por chegar até aqui! Espero que esse artigo tenha te ajudado com suas dúvidas ou te ensinado algo novo. 😊&lt;/p&gt;

&lt;p&gt;Para mim, pessoalmente, ensinar é a melhor forma de aprender. Então, se você tiver alguma dúvida ou sugestão, sinta-se à vontade para entrar em contato comigo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sabrinabarros.github.io/" rel="noopener noreferrer"&gt;Meu Site Pessoal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SabrinaBarros" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/saazbarros/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.instagram.com/DevSaaz/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/SabrnaBarrosDev" rel="noopener noreferrer"&gt;Falecido Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Toda pergunta é valida! Bons estudos e que a sorte esteja sempre ao seu favor!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F5aktyxofe3w2mfiu8wp2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F5aktyxofe3w2mfiu8wp2.gif" alt="Janet da serie " width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://react.dev/reference/rsc/server-components" rel="noopener noreferrer"&gt;React Server Components - React Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nextjs.org/docs/pages/building-your-application/rendering/server-side-rendering" rel="noopener noreferrer"&gt;Server-side Rendering (SSR) - Next Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Server-side/First_steps/Web_frameworks" rel="noopener noreferrer"&gt;Server-side web frameworks - MDN Web Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ssr</category>
      <category>react</category>
      <category>seo</category>
      <category>frontend</category>
    </item>
    <item>
      <title>JSON: Uma Visão Abrangente sobre o Formato de Dados Interchange</title>
      <dc:creator>Sabrina Barros</dc:creator>
      <pubDate>Thu, 25 Apr 2024 20:02:53 +0000</pubDate>
      <link>https://dev.to/sabrinabarros/json-uma-visao-abrangente-sobre-o-formato-de-dados-interchange-a15</link>
      <guid>https://dev.to/sabrinabarros/json-uma-visao-abrangente-sobre-o-formato-de-dados-interchange-a15</guid>
      <description>&lt;p&gt;JSON é a abreviação de "&lt;em&gt;JavaScript Object Notation&lt;/em&gt;", caso esse seja um conceito recente para você, não se assuste com o nome grande, é na verdade bem simples de entender.&lt;/p&gt;

&lt;p&gt;Em sua essência, JSON é um formato de dados leve, com interoperabilidade ampla e de fácil legibilidade, tanto por seres humanos quanto por máquinas. &lt;/p&gt;

&lt;p&gt;Desde sua primeira especificação por &lt;em&gt;Douglas Crockford&lt;/em&gt; nos anos 2000, tornou-se uma escolha popular para troca e armazenamento de dados, e vem substituindo cada vez mais o formato padrão até então, o XML.&lt;/p&gt;

&lt;p&gt;Neste artigo, pretendo explorar os fundamentos do JSON, suas características, aplicações e algumas técnicas um pouco mais avançadas para manipulação eficiente de dados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Uma Breve História
&lt;/h2&gt;

&lt;p&gt;O objetivo por trás da criação do JSON era ser uma alternativa simples e leve ao XML para a troca de dados entre diferentes sistemas e linguagens de programação, mas especialmente para comunicação entre clientes web e servidores.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Crockford&lt;/em&gt; percebeu que, embora o XML fosse amplamente utilizado para representar e trocar dados estruturados, ele tinha algumas desvantagens significativas, incluindo uma sintaxe mais complexa e uma sobrecarga maior em termos de tamanho de arquivo e processamento.&lt;/p&gt;

&lt;p&gt;Inspirado pela sintaxe de objetos literais em &lt;em&gt;JavaScript&lt;/em&gt;, o JSON foi formalizado pela primeira vez em 2006, quando &lt;em&gt;Crockford&lt;/em&gt; publicou a especificação oficial no site &lt;a href="https://www.json.org/json-pt.html" rel="noopener noreferrer"&gt;json.org&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hoje em dia, o JSON é amplamente utilizado em uma variedade de contextos, desde comunicação entre cliente e servidor, em aplicativos web, até representação de dados em bancos de dados NoSQL e Web APIs. Então quando você acessa alguma aplicação na web é altamente provável que ela esteja fazendo uso do JSON.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estrutura de dados com JSON
&lt;/h2&gt;

&lt;p&gt;O JSON representa dados estruturados no formato de objetos com pares de &lt;strong&gt;chave-valor&lt;/strong&gt;. Ele é independente de linguagem, e pode ser compreendido e manipulado nativamente por uma variedade de linguagens de programação. Como por exemplo: Ruby, Python, PHP, JavaScript…Mas mesmo para as linguagens que não aceitam o JSON nativamente, no site oficial da especificação existem inúmeras bibliotecas que fazem o parser para essas linguagens.&lt;/p&gt;

&lt;p&gt;A estrutura de um JSON consiste principalmente em objeto &lt;code&gt;{}&lt;/code&gt; e array &lt;code&gt;[]&lt;/code&gt;. Um JSON, deve sempre começar com abre chaves &lt;code&gt;{&lt;/code&gt; e terminar com fecha chaves &lt;code&gt;}&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Os dados são armazenados dentro do JSON por pares de &lt;code&gt;“nome”: “valor”&lt;/code&gt; e então separados por vírgula.&lt;/p&gt;

&lt;p&gt;exemplo simples de um &lt;strong&gt;objeto JSON&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&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;"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;21&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"solteiro"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"amigos"&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="s2"&gt;"Robson"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Jorge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Maria"&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;Esse conjunto de informações é chamado de &lt;strong&gt;objeto&lt;/strong&gt;. O valor de um &lt;strong&gt;objeto JSON&lt;/strong&gt; pode conter: &lt;code&gt;string&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;boolean&lt;/code&gt;, &lt;code&gt;array&lt;/code&gt;, &lt;code&gt;object&lt;/code&gt; ou &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Observe a propriedade &lt;code&gt;amigos&lt;/code&gt;, que contém um &lt;strong&gt;array&lt;/strong&gt; como valor, um &lt;strong&gt;array JSON&lt;/strong&gt; é uma coleção ordenada de valores, onde cada valor pode ser qualquer tipo de dado, assim como o &lt;strong&gt;objeto JSON&lt;/strong&gt;, incluindo outros arrays ou objetos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aplicações de JSON
&lt;/h2&gt;

&lt;p&gt;JSON é amplamente utilizado em uma variedade de contextos, incluindo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comunicação entre cliente e servidor em aplicativos web e móveis.&lt;/li&gt;
&lt;li&gt;Armazenamento de configurações e preferências de usuário.&lt;/li&gt;
&lt;li&gt;Intercâmbio de dados entre sistemas distribuídos e Web APIs.&lt;/li&gt;
&lt;li&gt;Representação de dados em bancos de dados NoSQL, como o MongoDB.&lt;/li&gt;
&lt;li&gt;Arquivos de configuração&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Concorrentes
&lt;/h2&gt;

&lt;p&gt;JSON não é o único no mercado de serialização de dados, seus principais concorrentes são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;YAML&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Segundo o website oficial: "YAML é uma serialização de dados amigável para humanos e padrão para todas as linguagens de programação".&lt;/p&gt;

&lt;p&gt;Exemplo da estrutura YAML:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="na"&gt;library&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Great&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Gatsby"&lt;/span&gt;
    &lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;F.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Scott&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Fitzgerald"&lt;/span&gt;
    &lt;span class="na"&gt;genre&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Novel"&lt;/span&gt;
    &lt;span class="na"&gt;year&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1925&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;To&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Kill&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Mockingbird"&lt;/span&gt;
    &lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Harper&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Lee"&lt;/span&gt;
    &lt;span class="na"&gt;genre&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fiction"&lt;/span&gt;
    &lt;span class="na"&gt;year&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1960&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Geralmente, quando alguma ferramenta faz uso de arquivo de configuração, esse esquivo será feito em JSON ou YAML.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;XML&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O já citado antecessor ao JSON em relação a dominância de mercado, foi perdendo popularidade por ser muito menos intuitivo em termos de leitura, além da sobrecarga de processamento.&lt;/p&gt;

&lt;p&gt;Exemplo da estrutura XML:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;

&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;library&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;book&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;The Great Gatsby&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;author&amp;gt;&lt;/span&gt;F. Scott Fitzgerald&lt;span class="nt"&gt;&amp;lt;/author&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;genre&amp;gt;&lt;/span&gt;Novel&lt;span class="nt"&gt;&amp;lt;/genre&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;year&amp;gt;&lt;/span&gt;1925&lt;span class="nt"&gt;&amp;lt;/year&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/book&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;book&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;To Kill a Mockingbird&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;author&amp;gt;&lt;/span&gt;Harper Lee&lt;span class="nt"&gt;&amp;lt;/author&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;genre&amp;gt;&lt;/span&gt;Fiction&lt;span class="nt"&gt;&amp;lt;/genre&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;year&amp;gt;&lt;/span&gt;1960&lt;span class="nt"&gt;&amp;lt;/year&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/book&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/library&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Apesar da adoção do JSON pela maioria, o XML ainda é muito usado para atender melhor a demanda de dados mais completos, é comum o banco de dados utilizar XML como formato de armazenamento.&lt;/p&gt;

&lt;h2&gt;
  
  
  Normalização de Dados com JSON
&lt;/h2&gt;

&lt;p&gt;Na ciência da computação existe um termo chamado “&lt;em&gt;tipos de dados complexos&lt;/em&gt;”, e podemos ver o JSON basicamente como uma forma de organizar e estruturar dados complexos de maneira hierárquica e legível.&lt;/p&gt;

&lt;p&gt;Um exemplo de tipos de dados complexo utilizado no JSON é o objeto, ou o array, por exemplo.&lt;/p&gt;

&lt;p&gt;Ok, mas o tópico é sobre normalização de dados, certo? A questão é que embora tipos de dados complexos possam oferecer flexibilidade e profundidade aos seus dados, também podem surgir irregularidades e discrepâncias se os dados não forem estruturados e padronizados adequadamente.&lt;/p&gt;

&lt;p&gt;E é aí que a normalização de dados entra, esse é o processo de organizar dados em uma estrutura que minimize a redundância e facilite a consulta e atualização dos mesmos. No contexto de JSON, isso geralmente é feito dividindo os dados em várias partes relacionadas e usando &lt;strong&gt;&lt;em&gt;IDs&lt;/em&gt;&lt;/strong&gt; para referenciá-las.&lt;/p&gt;

&lt;p&gt;Por exemplo, este é um conjunto de dados JSON que representa informações sobre livros e autores:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&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;"livros"&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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"titulo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Dom Casmurro"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"autor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Machado de Assis"&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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"titulo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Memórias Póstumas de Brás Cubas"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"autor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Machado de Assis"&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;"autores"&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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&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;"Machado de Assis"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"nacionalidade"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Brasileiro"&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;Neste exemplo, cada livro contém o nome do autor. Isso pode resultar em redundância se o mesmo autor tiver escrito vários livros. Em vez disso, podemos normalizar os dados dividindo os livros e os autores e referenciando os autores pelos &lt;strong&gt;&lt;em&gt;IDs&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&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;"livros"&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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"titulo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Dom Casmurro"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"autor_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"titulo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Memórias Póstumas de Brás Cubas"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"autor_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&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;"autores"&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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&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;"Machado de Assis"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"nacionalidade"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Brasileiro"&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;Essa abordagem economiza espaço e simplifica a atualização de informações do autor. Além disso, permite consultas mais eficientes, especialmente em conjuntos de dados grandes, pois os autores agora são referenciados por IDs únicos.&lt;/p&gt;

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

&lt;p&gt;Obrigado por chegar até aqui, caro leitor! Fico feliz por termos explorado os conceitos essenciais do JSON, desde sua origem até sua ampla adoção juntos. Além de abordar os fundamentos, discutimos também tópicos comumente menos abordados, como a normalização de dados. Compreender esses aspectos é crucial para criar soluções eficientes e escaláveis nos seus projetos.&lt;/p&gt;

&lt;p&gt;Por último, vou recomendar algo que me ajudou muito, anos atrás durante o meu começo na área de desenvolvimento de software. Saber que se seu JSON é válido e está correto é muito importante, às vezes deixamos escapar pequenas coisas por conta do olhar viciado. O site JASONlint valida seu JSON, confere se há erros, seja de estrutura, tipo de dados etc…&lt;/p&gt;

&lt;p&gt;Bons estudos e que a sorte esteja sempre ao seu favor!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fvum859m7qe4oul5qf9rk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fvum859m7qe4oul5qf9rk.gif" alt="Jogos Vorazes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://zenorocha.com/xml-pra-que-conheca-o-json-e-o-yaml/" rel="noopener noreferrer"&gt;Zeno Rocha - XML pra quê? Conheça o JSON e o YAML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/shadowlik/o-que-e-json-e-para-que-serve-2eg7"&gt;Henrique Marques Fernandes - O que é JSON e para que serve?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=P81dE-tkaaA&amp;amp;t=29s" rel="noopener noreferrer"&gt;Código Fonte TV - JSON // Dicionário do Programador&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>json</category>
      <category>datastructures</category>
    </item>
    <item>
      <title>O que é Markdown, e como ele pode melhorar o seu README no GitHub!</title>
      <dc:creator>Sabrina Barros</dc:creator>
      <pubDate>Fri, 26 Mar 2021 21:50:33 +0000</pubDate>
      <link>https://dev.to/sabrinabarros/o-que-e-markdown-e-como-ele-pode-melhorar-o-seu-readme-no-github-2n2l</link>
      <guid>https://dev.to/sabrinabarros/o-que-e-markdown-e-como-ele-pode-melhorar-o-seu-readme-no-github-2n2l</guid>
      <description>&lt;p&gt;&lt;a href="https://media.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%2F2vyeh7jc5mcn1jec7ipi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F2vyeh7jc5mcn1jec7ipi.png" alt="Markdown Icon." width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O README no &lt;em&gt;GitHub&lt;/em&gt; é uma parte essencial do seu repositório, onde você apresenta seu projeto ou organiza seu repositório!  &lt;/p&gt;

&lt;p&gt;E para formatar o seu arquivo README utilizamos a linguagem de marcação chamada &lt;em&gt;Markdown&lt;/em&gt;. As possibilidades dessa linguagem incluem formatações de texto de forma fácil e útil, apesar de ser uma formatação simples contém o que há de mais essencial para você deixar seu texto bem construído e organizado, por exemplo: listas, tabelas, titulação, inserção de links e imagens, bloco de código, destaque, negrito, sublinhado, itálico etc... &lt;/p&gt;

&lt;h2&gt;
  
  
  Onde Markdown costuma ser usado?
&lt;/h2&gt;

&lt;p&gt;No próprio &lt;em&gt;GitHub&lt;/em&gt; além do já citado arquivo README.md, pull requests, issues e na wiki. Mas também em outras plataformas para escrever mensagens em fóruns ou rich text. Este artigo mesmo foi escrito e formatado em &lt;em&gt;Markdown&lt;/em&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Como escrever em Markdown
&lt;/h2&gt;

&lt;p&gt;A partir deste ponto eu vou te ensinar como executar essa linguagem na pratica passo a passo! &lt;/p&gt;

&lt;p&gt;Primeiro vamos abrir um preview de Markdown, para que você possa acompanhar o resultado do seu código enquanto o executa. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Abra o editor de código VSCode. Usarei ele como base nesse tutorial. (&lt;em&gt;Clique &lt;a href="https://code.visualstudio.com" rel="noopener noreferrer"&gt;aqui&lt;/a&gt; para baixar o VSCode caso você não o tenha instalado&lt;/em&gt;.) &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Crie um novo arquivo com o nome README.md, repare que &lt;code&gt;.md&lt;/code&gt; é a extensão de um arquivo Markdown. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pressione &lt;code&gt;CTRL/CMD + SHIFT + P&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Isso fara com que uma janela se abra e nela você digitara &lt;code&gt;Markdown&lt;/code&gt;, clique na extensão de nome &lt;code&gt;*Markdown: Open Preview to the Side*&lt;/code&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pronto! Agora sempre que quiser abrir sua preview é só dar o comando &lt;code&gt;CTRL/CMD + K&lt;/code&gt; depois pressione &lt;code&gt;V&lt;/code&gt; separadamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agora vamos à prática!
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fidsuv0aave0tduqe5798.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fidsuv0aave0tduqe5798.gif" alt="Alt Text" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A partir daqui vamos para as tags de formatação em Markdown, execute-os no seu arquivo ao mesmo tempo que os aprende para ver o resultado. &lt;/p&gt;

&lt;h3&gt;
  
  
  Titulação
&lt;/h3&gt;

&lt;p&gt;Para você destacar títulos (&lt;em&gt;como os títulos deste post, por exemplo&lt;/em&gt;), utiliza-se &lt;code&gt;#&lt;/code&gt;. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


# Título 1  


## Título 2 


### Título 3 


#### Título 4 


##### Título 5 


###### Título 6 



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

&lt;/div&gt;
&lt;h1&gt;
  
  
  Título 1
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Título 2
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Título 3
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Título 4
&lt;/h4&gt;
&lt;h5&gt;
  
  
  Título 5
&lt;/h5&gt;
&lt;h6&gt;
  
  
  Título 6
&lt;/h6&gt;
&lt;h2&gt;
  
  
  Formatação
&lt;/h2&gt;

&lt;p&gt;Às vezes, existe mais de uma forma de se fazer a mesma coisa em Markdown. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Itálico&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

&lt;span class="ge"&gt;*Itálico*&lt;/span&gt; &lt;span class="sb"&gt;


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

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

&lt;span class="ge"&gt;_Itálico_&lt;/span&gt; &lt;span class="sb"&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Negrito&lt;/strong&gt; &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

&lt;span class="gs"&gt;**Negrito**&lt;/span&gt; &lt;span class="sb"&gt;


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

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

&lt;span class="gs"&gt;__Negrito__&lt;/span&gt; &lt;span class="sb"&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Itálico e Negrito&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

&lt;span class="gs"&gt;***Italico e Negrito**&lt;/span&gt;&lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="sb"&gt;


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

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

&lt;span class="gs"&gt;___Italico e Negrito__&lt;/span&gt;_ &lt;span class="sb"&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;del&gt;Riscado&lt;/del&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

~~Riscado~~ &lt;span class="sb"&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;Destaque&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

&lt;span class="sb"&gt;`Destaque`&lt;/span&gt; &lt;span class="sb"&gt;


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

&lt;/div&gt;

&lt;p&gt;Repare que estou utilizando o &lt;strong&gt;&lt;em&gt;acento invertido&lt;/em&gt;&lt;/strong&gt; (&lt;code&gt;è&lt;/code&gt;), e não o acento comum que utilizamos no dia a dia (&lt;code&gt;é&lt;/code&gt;). &lt;/p&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;p&gt;Existem duas formas de se inserir links: &lt;/p&gt;

&lt;p&gt;Com &lt;a href="//www.google.com"&gt;texto&lt;/a&gt; âncora. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Texto&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;www.google.com&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="sb"&gt;


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

&lt;/div&gt;

&lt;p&gt;Ou apenas o link direto &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;www.exemplo.com&amp;gt;&lt;/span&gt; &lt;span class="sb"&gt;


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Imagens
&lt;/h3&gt;

&lt;p&gt;É parecido com inserir links. &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

&lt;span class="p"&gt;![&lt;/span&gt;&lt;span class="nv"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;www.caminhodaimagem.com&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="sb"&gt;


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

&lt;/div&gt;

&lt;p&gt;Resultado: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F78176435%3Fs%3D400%26u%3D0c1d368dc7b6c90fbf31bcca6a04cd3f6e01183b%26v%3D4" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F78176435%3Fs%3D400%26u%3D0c1d368dc7b6c90fbf31bcca6a04cd3f6e01183b%26v%3D4" alt="Foto de perfil de Sabrina Barros no GitHub." width="400" height="400"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Listas
&lt;/h3&gt;

&lt;p&gt;Para criar listas não ordenadas é só utilizar &lt;code&gt;-&lt;/code&gt; ou &lt;code&gt;*&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;E&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fica&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Assim&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E para listas ordenadas o bom e velho &lt;code&gt;1.&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Item &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Outro item&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mais um item&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Em ambos os casos se lembre de dar um espaço depois do ícone para o comando funcionar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Blockquote
&lt;/h3&gt;

&lt;p&gt;Caso você precise fazer uma citação ou comentário é só utilizar &lt;code&gt;&amp;gt;&lt;/code&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;E fica assim.&lt;/p&gt;

&lt;p&gt;Pra continuar outro “paragrafo” como este no blockquote você precisa utilizar outro &lt;code&gt;&amp;gt;&lt;/code&gt; no começo da linha.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gt"&gt;

&amp;gt; Paragrafo.&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; Outro paragrafo.&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; Uau! Um terceito paragrafo.&lt;/span&gt;&lt;span class="sb"&gt;


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Paragrafo.&lt;br&gt;
Outro paragrafo.&lt;br&gt;
Uau! Um terceito paragrafo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Bloco de código
&lt;/h3&gt;

&lt;p&gt;Sabe os blocos de código legais que você estava vendo ao longo desse artigo? Se faz assim:&lt;/p&gt;

&lt;pre&gt;
```js

  
Console.log(3 &amp;gt; 2) 


```
&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;Onde esta o &lt;code&gt;js&lt;/code&gt; você pode substituir por qualquer outra linguagem que você quer exemplificar.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Você pode substituir o acento invertido (&lt;em&gt;crase&lt;/em&gt;) por &lt;code&gt;~&lt;/code&gt; que também funciona da mesma forma. &lt;/p&gt;

&lt;h3&gt;
  
  
  Tasklist
&lt;/h3&gt;

&lt;p&gt;Isso aqui, sabe?  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fhxdb9qboofziap7pwzc9.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fhxdb9qboofziap7pwzc9.jpeg" alt="Lista de tarefas contendo 3 itens, onde apenas o primeiro item está marcado como feito." width="400" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se faz assim:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

[x] Fazer Rascunho do artigo
[ ] Revisar artigo
[ ] Publicar artigo &lt;span class="sb"&gt;


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

&lt;/div&gt;

&lt;p&gt;Não esqueça do espaço entre os caracteres, quando completar sua tarefa é só colocar um &lt;code&gt;x&lt;/code&gt; entre os colchetes. &lt;/p&gt;

&lt;h3&gt;
  
  
  Tabelas
&lt;/h3&gt;

&lt;p&gt;No Markdown você literalmente tem que desenhar as tabelas. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;|&lt;/code&gt; Para colunas. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;-&lt;/code&gt; Para Divisórias de título. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

Exemplo | Valor do exemplo 
--------- | ------ 
Exemplo 1 | R$ 10 
Exemplo 2 | R$ 8 
Exemplo 3 | R$ 7 
Exemplo 4 | R$ 8 


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

&lt;/div&gt;

&lt;p&gt;Fica assim: &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Exemplo&lt;/th&gt;
&lt;th&gt;Valor do exemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Exemplo 1&lt;/td&gt;
&lt;td&gt;R$ 10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exemplo 2&lt;/td&gt;
&lt;td&gt;R$ 8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exemplo 3&lt;/td&gt;
&lt;td&gt;R$ 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exemplo 4&lt;/td&gt;
&lt;td&gt;R$ 8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;p&gt;Mas caso você goste de atalhos, recomendo &lt;a href="https://www.tablesgenerator.com/markdown_tables" rel="noopener noreferrer"&gt;este site&lt;/a&gt; que desenha tabelas em Markdown para você e é só copiar e colar! &lt;/p&gt;

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

&lt;p&gt;Esses são os elementos mais básicos para quem está conhecendo o Markdown e pretende utilizá-lo no dia a dia. Com isso você já consegue usar o melhor do Markdown nas suas plataformas preferidas, formatar seus textos, artigos e seus README’s.&lt;/p&gt;

&lt;p&gt;Espero que tenha sido útil para você!&lt;/p&gt;

&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fxdeu3coyhynrqcwv7kev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fxdeu3coyhynrqcwv7kev.png" alt="Simbolo do Markdown: Letra M com uma seta apontando para baixo." width="128" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://pt.wikipedia.org/wiki/Markdown#:~:text=Markdown%20%C3%A9%20frequentemente%20usado%20para,um%20editor%20de%20texto%20simples%20." rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.pipz.com/central-de-ajuda/learning-center/guia-basico-de-markdown#open" rel="noopener noreferrer"&gt;Pipz Academy - Guia básico de Markdown&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/azure/escrita-eficiente-de-artigos-com-vscode-1am4"&gt;Lucas Santos - Escrita Eficiente de Artigos com VSCode&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://medium.com/@afonsopacifer/pensando-em-urls-no-github-3517d97249d0" rel="noopener noreferrer"&gt;Afonso Pacifer - Pensando em URLs no Github&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>markdown</category>
      <category>github</category>
    </item>
    <item>
      <title>O que é um sistema de controle de versão?</title>
      <dc:creator>Sabrina Barros</dc:creator>
      <pubDate>Tue, 23 Mar 2021 20:09:44 +0000</pubDate>
      <link>https://dev.to/sabrinabarros/o-que-e-um-sistema-de-controle-de-versao-1ob2</link>
      <guid>https://dev.to/sabrinabarros/o-que-e-um-sistema-de-controle-de-versao-1ob2</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwibk8gkgwp8ouo4dacqw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwibk8gkgwp8ouo4dacqw.jpg" alt="Alt Text" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O melhor jeito de aprender é ensinando! E por isso eu vim aqui repassar meus conhecimentos a respeito de versionamento. É meu primeiro artigo sobre programação e espero ser útil para você. &lt;/p&gt;

&lt;p&gt;Antes de mais nada lembre-se: &lt;strong&gt;Git e GitHub não são a mesma coisa&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Primeiramente o que é um sistema de controle de versão? É menos assustador do que o nome eu prometo. Quando falamos de &lt;em&gt;versionamento&lt;/em&gt; queremos dizer literalmente várias versões de um mesmo projeto/código. &lt;/p&gt;

&lt;p&gt;Imagine a seguinte situação: você tem o trabalho de fazer o layout de um site para um cliente, porem a cada versão do site que você apresenta, o cliente pede uma alteração, e em certo ponto ele pede para você voltar algumas versões atrás, por exemplo: você fez o layout amarelo, mas depois ele pediu para alterar para azul, depois vermelho, mas no fim das contas o cliente optou pelo amarelo que você fez no começo, que chato seria ter que refazer o mesmo trabalho tudo de novo ne? Não com o versionamento! Pois com ele você pode navegar entre todas suas &lt;strong&gt;versões anteriores&lt;/strong&gt; sem precisar sacrificar suas &lt;strong&gt;versões mais recentes&lt;/strong&gt; para isso, você consegue alterar e resgatar todas suas versões salvas no momento que você quiser.  &lt;/p&gt;

&lt;h1&gt;
  
  
  Onde essas versões ficam guardadas?
&lt;/h1&gt;

&lt;p&gt;Relaxe, você não precisa ter um hd infinito para guardar tantas versões, porque todas elas ficam armazenadas em nuvem, em um &lt;em&gt;repositório remoto&lt;/em&gt; online (&lt;em&gt;GitHub&lt;/em&gt;), isso significa que você poderá acessar o seu projeto de absolutamente qualquer lugar que você estiver basta ter uma rede &lt;em&gt;Wi-fi&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Repositório nada mais é do que um servidor de armazenamento de arquivos, que pode ser tanto local, quanto remoto.  &lt;/p&gt;

&lt;h1&gt;
  
  
  Como subir seu código para o seu repositório?
&lt;/h1&gt;

&lt;p&gt;Com um &lt;em&gt;terminal&lt;/em&gt; é claro! Como o &lt;em&gt;Git&lt;/em&gt; por exemplo, a primeira vista um &lt;em&gt;terminal&lt;/em&gt; pode parecer assustador, mas é bem mais simples do que parece, com poucos comandos você já consegue fazer tudo que você vai precisar no dia a dia. &lt;/p&gt;

&lt;p&gt;O papel do terminal vai ser salvar o seu código no estado em que ele está, chamamos isso de &lt;em&gt;commit&lt;/em&gt;, sempre que você quiser guardar alguma mudança você irá realizar um &lt;em&gt;commit&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Para enviar o seu &lt;em&gt;commit&lt;/em&gt; para o &lt;em&gt;repositório remoto&lt;/em&gt;, você precisa realizar um &lt;em&gt;push&lt;/em&gt;, que é um comando que nada mais faz do que subir suas últimas atualizações para seu repositório. &lt;/p&gt;

&lt;p&gt;Mas não se espante com essas palavras novas, em breve publicarei um segundo artigo onde eu te ensino como utilizar esses comandos, fazer tudo isso na pratica e irei linkar o post aqui. &lt;/p&gt;

</description>
      <category>github</category>
    </item>
  </channel>
</rss>
