<?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: Jean Carlos Molossi</title>
    <description>The latest articles on DEV Community by Jean Carlos Molossi (@jeanmolossi).</description>
    <link>https://dev.to/jeanmolossi</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%2F419308%2F2101dc59-8c5f-40db-8f6c-cc23d2bbdf2a.jpeg</url>
      <title>DEV Community: Jean Carlos Molossi</title>
      <link>https://dev.to/jeanmolossi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jeanmolossi"/>
    <language>en</language>
    <item>
      <title>O que pode ser feito com HTML ?</title>
      <dc:creator>Jean Carlos Molossi</dc:creator>
      <pubDate>Sat, 21 Jan 2023 23:18:00 +0000</pubDate>
      <link>https://dev.to/jeanmolossi/o-que-pode-ser-feito-com-html--28fo</link>
      <guid>https://dev.to/jeanmolossi/o-que-pode-ser-feito-com-html--28fo</guid>
      <description>&lt;p&gt;O HTML (Hypertext Markup Language) é uma linguagem de marcação utilizada para criar páginas da web. Ela funciona como uma espécie de esqueleto para o conteúdo da página, fornecendo estrutura e significado para o texto, imagens, vídeos, formulários e outros elementos que compõem a página.&lt;/p&gt;

&lt;p&gt;Por exemplo, imagine que você quer criar um site para o seu negócio. Com o HTML, você pode adicionar um título à sua página principal, como "Bem-vindo à minha loja de roupas". Além disso, você pode adicionar parágrafos descrevendo os produtos que você vende, como "Oferecemos uma ampla variedade de roupas femininas, masculinas e infantis, desde camisetas básicas até vestidos de festa".&lt;/p&gt;

&lt;p&gt;O HTML é uma linguagem de marcação que é usada para criar páginas da web. Com ele, é possível fazer várias coisas, tais como:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Criar estrutura de página: O HTML permite adicionar títulos, parágrafos, listas, links, imagens e vídeos ao seu site, dando estrutura e significado ao conteúdo.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Título&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Parágrafo&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;ol&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Item de lista&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ol&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Adicionar links: O HTML permite adicionar links para outras páginas dentro do seu site ou para outros sites na internet.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"http://jeanmolossi.com.br/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Link ou Anchor&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Criar formulários: O HTML permite criar formulários de entrada de dados, como formulários de contato ou formulários de compra online, para que os visitantes possam interagir com o site.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;label&amp;gt;&lt;/span&gt;Digite seu e-mail&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Adicionar imagens e vídeos: O HTML permite adicionar imagens e vídeos ao seu site, tornando-o mais atraente e interativo.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://jeanmolossi.com.br/kumala-la-kumala.gif?w=640&amp;amp;q=undefined"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"imagem kumala"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Criar tabelas: O HTML permite criar tabelas para exibir dados ou organizar o conteúdo em uma grade.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;table&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;thead&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;#&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;E-mail&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/thead&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;tbody&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;1&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;john@doe.com&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/tbody&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Criar áreas de navegação: O HTML permite criar áreas de navegação para facilitar a navegação pelo site.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;nav&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Início&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/contato"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Contato&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Adicionar metadados: O HTML permite adicionar metadados à página, como o título da página, descrição e palavras-chave, que são usados ​​pelos mecanismos de busca para indexar e classificar sua página.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Título da página&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Acessibilidade: O HTML também permite criar conteúdo acessível para pessoas com necessidades especiais, usando tags específicas e atributos.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"dinosaur.png"&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"dino-label"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É importante notar que o HTML é usado em conjunto com outras tecnologias da web, como o CSS (Cascading Style Sheets) e o JavaScript, para criar páginas da web dinâmicas e atraentes.&lt;/p&gt;

&lt;p&gt;Se você está interessado em aprender HTML, existem muitos recursos disponíveis na internet, como tutoriais em vídeo, livros e cursos online. Comece com o básico e, aos poucos, vá aprofundando seus conhecimentos. Em pouco tempo, você estará criando páginas da web incríveis! Alguns recursos populares para aprender HTML incluem o &lt;a href="https://www.w3schools.com/" rel="noopener noreferrer"&gt;W3Schools&lt;/a&gt;, etc.&lt;/p&gt;

&lt;p&gt;Em resumo, o HTML é uma linguagem de marcação fundamental para a criação de páginas da web. Ele permite adicionar títulos, parágrafos, listas, links, imagens e vídeos ao seu site, além de permitir a criação de formulários para que os usuários interajam com o site. Quando usado em conjunto com o CSS e o JavaScript, o HTML permite criar sites atraentes e dinâmicos. Se você está interessado em aprender HTML, há muitos recursos disponíveis para ajudá-lo a começar.&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Como criar micro serviços - Nível fácil parte 3</title>
      <dc:creator>Jean Carlos Molossi</dc:creator>
      <pubDate>Wed, 29 Jun 2022 04:06:58 +0000</pubDate>
      <link>https://dev.to/jeanmolossi/como-criar-micro-servicos-nivel-facil-parte-3-3cjj</link>
      <guid>https://dev.to/jeanmolossi/como-criar-micro-servicos-nivel-facil-parte-3-3cjj</guid>
      <description>&lt;p&gt;Como já dito nos artigos anteriores, criar um sistema baseado em micro serviços não é difícil. Vamos passo a passo e ao final dessa série, você verá que de fato é simples.&lt;/p&gt;

&lt;h1&gt;
  
  
  Users API
&lt;/h1&gt;

&lt;p&gt;Aqui, vamos criar uma simples API Rest Http. Isso não deve ser um mistério. Ter uma Controller com as rotas, uma camada de Services, conexão com base de dados, tudo muito simples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Domínio
&lt;/h2&gt;

&lt;p&gt;Vamos iniciar pela camada de domínio. Isso vai garantir que foquemos em regras de negócio e depois nos preocupamos em implementar as rotas e regras de aplicação, que não são pertinentes ao domínio.&lt;/p&gt;

&lt;p&gt;Primeiro vamos iniciar nosso projeto.&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;mkdir &lt;/span&gt;users-api &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;users-api

yarn init &lt;span class="nt"&gt;-y&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Isso já deve gerar nossa pasta e iniciar o &lt;code&gt;package.json&lt;/code&gt;. Vamos configurar o &lt;code&gt;typescript&lt;/code&gt; agora, no terminal execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
yarn add &lt;span class="nt"&gt;-D&lt;/span&gt; typescript &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;

yarn tsc &lt;span class="nt"&gt;--init&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Isso resolve nossa configuração inicial do &lt;code&gt;typescript&lt;/code&gt;. Agora vamos começar com nosso domínio.&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;mkdir &lt;/span&gt;domain &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;touch &lt;/span&gt;domain/user.ts

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

&lt;/div&gt;



&lt;p&gt;Com isso vamos ter nossa entidade de &lt;code&gt;user&lt;/code&gt;. Antes de começar com a construção do nosso &lt;code&gt;user&lt;/code&gt; vamos configurar o &lt;code&gt;jest&lt;/code&gt; como nosso runtime para testes.&lt;/p&gt;

&lt;p&gt;Execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
yarn add &lt;span class="nt"&gt;-D&lt;/span&gt; jest @types/jest ts-jest ts-node

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

&lt;/div&gt;



&lt;p&gt;Após o comando acima, teremos o jest instalado, agora vamos configurá-lo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
yarn jest &lt;span class="nt"&gt;--init&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Com esse comando o &lt;code&gt;jest&lt;/code&gt; inicia o processo de configuração, com isso seu terminal fará algumas perguntas. Vamos às respostas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✔ Would you like to use Jest when running “test” script in “package.json”? (y/N)

&lt;ul&gt;
&lt;li&gt;Pressione “n”&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;✔ Would you like to use Typescript for the configuration file? (y/N)

&lt;ul&gt;
&lt;li&gt;Pressione “y”&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;✔ Choose the test environment that will be used for testing

&lt;ul&gt;
&lt;li&gt;Selecione “node”&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;✔ Do you want Jest to add coverage reports? (y/N)

&lt;ul&gt;
&lt;li&gt;Pressione “y”&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;✔ Which provider should be used to instrument code for coverage?

&lt;ul&gt;
&lt;li&gt;Selecione “v8”&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;✔ Automatically clear mock calls, instances, contexts and results before every test? (y/N)

&lt;ul&gt;
&lt;li&gt;Pressione “y”;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora você pode ver que foi criado um arquivo &lt;code&gt;jest.config.ts&lt;/code&gt;. Esse é o arquivo de configuração do jest. Porém, você precisa adicionar uma última configuração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// tsconfig.json&lt;/span&gt;

&lt;span class="c1"&gt;// ... Logo depois de export default&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="c1"&gt;// ... Aqui abaixo.&lt;/span&gt;

  &lt;span class="na"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;^.+&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.tsx?$&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ts-jest&lt;/span&gt;&lt;span class="dl"&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;// ...&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Vamos criar nosso primeiro teste para saber se está tudo correto.&lt;/p&gt;

&lt;p&gt;Crie o arquivo &lt;code&gt;user.spec.ts&lt;/code&gt; (ou execute &lt;code&gt;touch domain/user.spec.ts&lt;/code&gt;) junto com o arquivo &lt;code&gt;user.ts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Dentro do arquivo de teste (&lt;code&gt;user.spec.ts&lt;/code&gt;) vamos digitar o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;
&lt;span class="c1"&gt;// user.spec.ts&lt;/span&gt;

&lt;span class="nx"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Domínio de usuário&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;deve funcionar&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;toBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&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;Antes de testar, vamos ajustar nosso &lt;code&gt;package.json&lt;/code&gt;. Vamos adicionar um script. O &lt;code&gt;package.json&lt;/code&gt; deve ficar assim:&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="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;package.json&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;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"users-api"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MIT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&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;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"jest"&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;"devDependencies"&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;"@types/jest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^28.1.3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"jest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^28.1.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;"ts-jest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^28.0.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ts-node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^10.8.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;"typescript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.7.4"&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;Note que adicionamos uma chave &lt;code&gt;scripts&lt;/code&gt; e nela temos dois (2) scripts. Um para iniciar a aplicação e outro para testar.&lt;/p&gt;

&lt;p&gt;Agora no terminal, executamos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
yarn &lt;span class="nb"&gt;test&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Esperamos que tudo dê certo. Se aparecer &lt;code&gt;1 passed&lt;/code&gt; em verde, significa que tudo está bem configurado.&lt;/p&gt;

&lt;p&gt;A partir de agora, vou explicar o que faremos e o resultado.&lt;/p&gt;

&lt;p&gt;Vamos relembrar. Nossas regras de negócio nos dizem que:&lt;/p&gt;

&lt;p&gt;Todo usuário deve fornecer um e-mail e uma senha para poder se cadastrar.&lt;br&gt;
Toda atualização do usuário registra a data em que ocorreu.&lt;br&gt;
Sabendo disso, nosso teste de &lt;code&gt;user&lt;/code&gt; deve ficar assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// user.spec.ts&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Domínio de usuário&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;deve fornecer um e-mail e senha em User&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;password-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;created_at-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;updated_at-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;toBeTruthy&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;deve dar erro se não fornecer e-mail ou senha em User&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="c1"&gt;// Email vazio&lt;/span&gt;
                &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;password-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;created_at-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;updated_at-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nx"&gt;toThrowError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;É obrigatório informar um e-mail&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="c1"&gt;// Senha vazia&lt;/span&gt;
                &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;created_at-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;updated_at-fake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nx"&gt;toThrowError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;É obrigatório informar uma senha&lt;/span&gt;&lt;span class="dl"&gt;"&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;Se você tentar executar os testes &lt;code&gt;yarn test&lt;/code&gt; deve falhar. Mas agora vamos criar nossa classe de usuário para resolver isso.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// user.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;_user_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;_email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;_password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;_created_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;_updated_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nx"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;updated_at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_user_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_created_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_updated_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;updated_at&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;É obrigatório informar um e-mail&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;É obrigatório informar uma senha&lt;/span&gt;&lt;span class="dl"&gt;"&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="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;A partir de agora, acompanhe por vídeo. Este artigo ficará imenso caso eu explique tudo. O essencial já está aqui. O que terá no vídeo é a prática do desenvolvimento e insigths.&lt;/p&gt;

&lt;h1&gt;
  
  
  Acompanhe pelo vídeo
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Em breve&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Como criar micro serviços - Nível fácil parte 2</title>
      <dc:creator>Jean Carlos Molossi</dc:creator>
      <pubDate>Tue, 28 Jun 2022 04:34:27 +0000</pubDate>
      <link>https://dev.to/jeanmolossi/como-criar-micro-servicos-nivel-facil-parte-2-43ln</link>
      <guid>https://dev.to/jeanmolossi/como-criar-micro-servicos-nivel-facil-parte-2-43ln</guid>
      <description>&lt;p&gt;Criar um sistema orientado à micro serviços, na verdade, não é tão simples. Ser algo difícil e ser algo complexo são coisas distintas.&lt;/p&gt;

&lt;p&gt;Como comentei na parte 1, vou mostrar como pode ser fácil. Imagine que temos três (3) APIs se comunicando entre si via http em um único sistema.&lt;/p&gt;

&lt;p&gt;Pronto, você já tem o start de um sistema baseado em micro serviços. Quando trabalhamos com micro serviços, o paradigma de desenvolvimento fica um pouco diferente, eu explico:&lt;/p&gt;

&lt;h1&gt;
  
  
  Atenção desviada
&lt;/h1&gt;

&lt;p&gt;Nossa atenção muda de foco. Em uma API Rest padrão, focamos em padrões de projeto, código limpo, desacoplamento. Isso não é perdido de foco quando mudamos para micro serviços. Entretanto, nossa preocupação maior fica no monitoramento (ou observabilidade) de serviços e dependências.&lt;/p&gt;

&lt;p&gt;Nossa preocupação se estende à performance e resiliência das aplicações, por exemplo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nem tudo são rosas
&lt;/h2&gt;

&lt;p&gt;É importante comentar sobre o dia a dia de grandes sistemas. Nem tudo são rosas e serviços bem orquestrados. Na verdade, dispende-se grande esforço para manter tudo em ordem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nem tudo é complicado também
&lt;/h2&gt;

&lt;p&gt;No final das contas o que importa é se a solução resolve o problema, seja com monólito ou com micro serviços, tanto faz.&lt;/p&gt;

&lt;p&gt;De volta à nossa aplicação&lt;/p&gt;

&lt;h1&gt;
  
  
  Users API
&lt;/h1&gt;

&lt;p&gt;Vamos iniciar pela API de usuários. Ela será o ponto de entrada do nosso usuário.&lt;/p&gt;

&lt;p&gt;Nossas APIs seguirão o seguinte diagrama:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---r_sL3Rp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xckwx1vnrk2hsr9ewuko.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---r_sL3Rp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xckwx1vnrk2hsr9ewuko.jpg" alt="Arquitetura do projeto" width="801" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Camadas da API
&lt;/h1&gt;

&lt;p&gt;Como você viu no diagrama, teremos três (3) camadas em nossas APIs (sim, todas vão seguir esse padrão). Cada camada tem sua responsabilidade, vamos a elas:&lt;/p&gt;

&lt;h2&gt;
  
  
  Application
&lt;/h2&gt;

&lt;p&gt;Dentro da camada de application temos duas estruturas.&lt;/p&gt;

&lt;p&gt;A estrutura de Controller vai nos fornecer os recursos da API, são eles:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;/user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;/user&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A estrutura Factory será o ponto que acoplaremos a nossa aplicação com a camada de infraestrutura. Essa camada será o lugar onde teremos todas as junções da nossa aplicação, onde vamos conectar o nosso Controller, com nosso Service, com o Repository, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure
&lt;/h2&gt;

&lt;p&gt;Essa camada de infraestrutura será onde teremos as definições de arquitetura da nossa aplicação. Isso quer dizer que, todas as dependências e auxiliares que não trabalham com as regras do negócio, ficam nessa camada.&lt;/p&gt;

&lt;p&gt;Repository: é a estrutura responsável que cria uma interface de comunicação entre nossa aplicação e a base de dados.&lt;/p&gt;

&lt;p&gt;Data: é a estrutura responsável por buscar dados de outros lugares que não estão na base de dados. Por exemplo, consumir as outras APIs.&lt;/p&gt;

&lt;p&gt;Adapter: é a estrutura que vai adaptar e validar os dados de entrada e saída da nossa API com o Controller.&lt;/p&gt;

&lt;p&gt;Error: é a estrutura que modela diferentes erros baseados no comportamento da aplicação e da regra definida.&lt;/p&gt;

&lt;p&gt;Service: é a estrutura que mescla outras estruturas com o domínio, quase assemelha-se à Factory na camada de Application&lt;/p&gt;

&lt;h2&gt;
  
  
  Domain
&lt;/h2&gt;

&lt;p&gt;Essa é nossa camada de domínio, onde não devemos nos preocupar se vamos utilizar um ORM, filas, Frameworks ou qualquer outra dependência.&lt;/p&gt;

&lt;p&gt;Essa camada é responsável pela regra de negócio da nossa aplicação. Isso significa que, nos preocupamos unicamente com a lógica do negócio.&lt;/p&gt;

&lt;h1&gt;
  
  
  Acompanhe o vídeo
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Em breve&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>microservices</category>
      <category>programming</category>
    </item>
    <item>
      <title>Como criar micro serviços - Nível fácil</title>
      <dc:creator>Jean Carlos Molossi</dc:creator>
      <pubDate>Tue, 28 Jun 2022 03:34:27 +0000</pubDate>
      <link>https://dev.to/jeanmolossi/como-criar-micro-servicos-nivel-facil-37me</link>
      <guid>https://dev.to/jeanmolossi/como-criar-micro-servicos-nivel-facil-37me</guid>
      <description>&lt;p&gt;Criar uma API Rest e estruturar micro serviços não precisa ser algo difícil. Nesta sequência de artigos vamos entender desde a concepção de uma infraestrutura baseada em micro serviços até o desenvolvimento completo de uma aplicação.&lt;br&gt;
O que vamos ter nessa aplicação?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Veja o diagrama:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q-jOvnwF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ggon0vg4s14th774h254.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q-jOvnwF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ggon0vg4s14th774h254.jpg" alt="Diagrama de infraestrutura de micro serviços" width="880" height="586"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Baseado no diagrama vou explicar a motivação por trás de cada item e como vamos trabalhar com ele.&lt;/p&gt;

&lt;p&gt;É importante também que você entenda o que vamos levar em consideração como regras de negócio.&lt;/p&gt;

&lt;p&gt;Sim, regras de negócio. Ser programador não é só sobre sair criando códigos e scripts de automatização. Você precisa resolver problemas! Nada melhor que entender como o problema surge para conseguir uma saída para resolvê-lo.&lt;/p&gt;

&lt;p&gt;Vamos aos itens do diagrama.&lt;/p&gt;

&lt;h2&gt;
  
  
  CDN (Frontend Statics)
&lt;/h2&gt;

&lt;p&gt;É, essencialmente, nosso frontend. Você pode entendê-lo como a aplicação em HTML e CSS, &lt;em&gt;React&lt;/em&gt;, ou seja, lá qual o framework/lib que você queira usar (Vamos usar o &lt;em&gt;React&lt;/em&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Containers
&lt;/h3&gt;

&lt;p&gt;Esse grupo de itens corresponde às APIs que vamos criar separadamente, cada qual com suas respectivas responsabilidades.&lt;/p&gt;

&lt;h4&gt;
  
  
  Transactions API
&lt;/h4&gt;

&lt;p&gt;Essa é nossa API de transações (ou pagamentos e recebimentos).&lt;/p&gt;

&lt;p&gt;Essa API vai manter o histórico de transações de cada usuário e conta de usuário.&lt;/p&gt;

&lt;p&gt;Para simplificar, associe a um banco. Como se você fosse o usuário e tivesse contas nesse banco, algo como uma conta corrente e uma poupança.&lt;/p&gt;

&lt;p&gt;Essa API vai conter algo semelhante ao seu extrato.&lt;br&gt;
Vamos às regras de negócio da Transactions API&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regra 1:&lt;/strong&gt; Só podemos cadastrar transações, não podemos excluí-las. &lt;/p&gt;

&lt;p&gt;Isso significa que uma devolução ou estorno deve ser uma nova transação com o valor reembolsado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regra 2:&lt;/strong&gt; Toda transação deve ser diretamente relacionada a um usuário e a uma conta deste usuário.&lt;/p&gt;

&lt;p&gt;Isso significa que uma transação deve ter um usuário e uma conta deste mesmo usuário como origem/destino.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regra 3:&lt;/strong&gt; Toda transação deve ter um tipo, como entrada ou saída. Além de ter o valor, em centavos, da transação, bem como o método de pagamento (Ex.: &lt;code&gt;pix&lt;/code&gt;, &lt;code&gt;débito&lt;/code&gt;, &lt;code&gt;doc&lt;/code&gt; ou &lt;code&gt;ted&lt;/code&gt;).&lt;/p&gt;

&lt;h4&gt;
  
  
  Users API
&lt;/h4&gt;

&lt;p&gt;Essa é a nossa API de usuários.&lt;/p&gt;

&lt;p&gt;Essa API vai manter os dados dos clientes. Aqui teremos e-mail, senha, data de criação e atualização de conta.&lt;br&gt;
Serão somente esses dados apenas para fins didáticos.&lt;/p&gt;

&lt;p&gt;Vamos às regras de negócio da Users API&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regra 1:&lt;/strong&gt; Todo usuário deve fornecer um e-mail e uma senha para cadastro.&lt;/p&gt;

&lt;p&gt;Isso significa que ambos campos de identificação do usuário são obrigatórios.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regra 2:&lt;/strong&gt; Toda atualização, adição de transação ou “abertura de conta” deste usuário deve registrar a data de atualização do usuário.&lt;/p&gt;

&lt;p&gt;Isso significa que nosso campo &lt;code&gt;updated_at&lt;/code&gt; sofrerá uma atualização a cada ação de escrita do usuário.&lt;/p&gt;

&lt;h4&gt;
  
  
  Accounts API
&lt;/h4&gt;

&lt;p&gt;Essa é a API de contas de usuário.&lt;br&gt;
Nela vamos manter o tipo da conta do usuário (se é corrente ou poupança), o balanço, o número e o usuário dono da conta.&lt;br&gt;
Vamos às regras de negócio da Accounts API&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regra 1:&lt;/strong&gt; Toda conta deve ter um tipo. Imagino algo como conta corrente, conta poupança.&lt;br&gt;
Isso significa que não podemos permitir um usuário criar uma conta sem solicitar que seja, conta-corrente ou conta-poupança.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regra 2:&lt;/strong&gt; Toda conta deve ter obrigatoriamente um dono.&lt;br&gt;
Isso nos diz que também não podemos permitir a criação de uma conta sem que haja um usuário envolvido.&lt;/p&gt;

&lt;p&gt;Regra 3: O balanço da conta deve ser recalculado sempre que for recebido um evento de nova transação.&lt;/p&gt;

&lt;p&gt;Isso significa que sempre que houver uma nova transação nossa API de contas vai “ouvir” este evento e recalcular o balanço baseado nesta nova transação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database
&lt;/h2&gt;

&lt;p&gt;Geralmente, micro serviços consomem suas próprias bases de dados. Nesta aplicação vamos utilizar uma única base de dados separando apenas as tabelas.&lt;/p&gt;

&lt;p&gt;Isso não é algo incomum em grandes sistemas que estão no processo de migração de um monólito. É uma etapa encontrada durante o processo de estrangulamento do sistema, mas isso é assunto para outro momento.&lt;/p&gt;

&lt;p&gt;Cada micro serviço deve ser independente de qualquer outro. Vamos trazer isso para nosso modelo. Caso nossa API de transações cair por qualquer motivo, a API de usuários ou de contas devem se manter funcionando de forma independente.&lt;br&gt;
Algo que é parcialmente verdade em nosso design atual. Caso o usuário queira saber seu saldo total não é possível se nossa API de contas venha a cair.&lt;/p&gt;

&lt;p&gt;Para resolver isso, deveríamos “clonar” o balanço das contas do usuário dentro da base de usuários. Isso tornaria nossa aplicação independente e caso a API de contas fique fora do ar, nosso cliente ainda consegue ver seu saldo atual.&lt;/p&gt;

&lt;p&gt;Ah! mas isso gera duplicidade de dados, né?! Correto!&lt;/p&gt;

&lt;p&gt;Esta é outra dúvida que acontece quando falamos sobre micro serviços independentes. Se você está no início de sua startup não sei se você deveria considerar usar micro serviços, quando digo não sei, na verdade, quero dizer não aconselho usar.&lt;/p&gt;

&lt;p&gt;Micro serviços são caros. Você deve levar em conta a utilizar micro serviços em situações específicas. Por exemplo, quando seu sistema está tão grande a ponto de ser muito custoso (em termos de desenvolvimento, não financeiro) para qualquer implementação nova.&lt;/p&gt;

&lt;p&gt;Enfim, este é outro tema que dá um artigo completo.&lt;br&gt;
Quanto às nossas bases de dados, simplesmente teremos três tabelas, usuários, transações e contas. Algo como o seguinte diagrama:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9O7dCXeX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yttqz9f696z5zu3t8jhw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9O7dCXeX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yttqz9f696z5zu3t8jhw.jpg" alt="Modelagem de tabelas da base de dados" width="381" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fila e eventos
&lt;/h2&gt;

&lt;p&gt;Vou te mostrar como trabalhar com fila e eventos não é um monstro de sete cabeças.&lt;/p&gt;

&lt;p&gt;Fila, como o próprio nome já diz é uma fila! (Uau!)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ftyxQYD2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f04lkg3njxkuqh00oogl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ftyxQYD2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f04lkg3njxkuqh00oogl.jpg" alt="Meme Genius" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em essência, vamos adicionar um evento na fila e esquecê-lo lá. Outra parte da nossa aplicação vai ficar monitorando a fila, pegando os eventos (também conhecidos como mensagens) e processando os dados recebidos.&lt;/p&gt;

&lt;p&gt;Para essa fila de eventos (ou mensagens) vamos utilizar RabbitMQ.&lt;/p&gt;

&lt;p&gt;Espero que fique calmo, não é algo difícil de utilizar. Você verá que é algo extremamente simples.&lt;/p&gt;

&lt;p&gt;É importante salientar que é diferente utilizar de implantar. RabbitMQ é algo complexo para se lidar quando se trata de infraestrutura. Porém, como desenvolvedor é algo relativamente simples.&lt;/p&gt;

&lt;p&gt;Vamos à mão na massa na &lt;a href="https://jeanmolossi.com.br/artigo/como-criar-micro-servicos-nivel-facil-parte-2-43ln"&gt;parte II&lt;/a&gt;. Espero você lá.&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Meu primeiro post</title>
      <dc:creator>Jean Carlos Molossi</dc:creator>
      <pubDate>Sat, 18 Jun 2022 06:14:55 +0000</pubDate>
      <link>https://dev.to/jeanmolossi/meu-primeiro-post-4eo6</link>
      <guid>https://dev.to/jeanmolossi/meu-primeiro-post-4eo6</guid>
      <description>&lt;p&gt;Este é meu primeiro post de teste.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Aqui é um texto de citação&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;aqui um inline code&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHtml&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Aqui é um bloco de código&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="p"&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 jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Aqui um comentário&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Here is a title&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;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;a href="https://jeanmolossi.com.br/blog"&gt;Aqui um link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aqui um texto em negrito&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Aqui um em itálico&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aqui&lt;/li&gt;
&lt;li&gt;uma&lt;/li&gt;
&lt;li&gt;lista&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Aqui&lt;/li&gt;
&lt;li&gt;outra&lt;/li&gt;
&lt;li&gt;lista&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;u&gt;Texto sublinhado&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;&lt;del&gt;Texto com strike&lt;/del&gt;&lt;/p&gt;




&lt;p&gt;Depois de um divisor&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TnunCeJY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yzy6dohq6fy5st7z1ayj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TnunCeJY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yzy6dohq6fy5st7z1ayj.png" alt="A bigger image of twitter stock with elon musk" width="703" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
