<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ REST - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ REST - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 06 Jun 2026 19:41:48 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/rest/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Tutorial de APIs REST – client REST, serviços REST e chamadas de API explicados com exemplos de código ]]>
                </title>
                <description>
                    <![CDATA[ Você já se perguntou como funciona o login/inscrição em um site da web no back-end? Ou ainda, quando você procura por "gatinhos fofinhos" no YouTube, você recebe vários resultados e consegue reproduzi-los pelo stream a partir de uma máquina remota? Neste guia para iniciantes, mostrarei para você o processo de ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/tutorial-de-apis-rest-client-rest-servicos-rest-e-chamadas-de-api-explicados-com-exemplos-de-codigo/</link>
                <guid isPermaLink="false">62443b976a6ca90519ad0e19</guid>
                
                    <category>
                        <![CDATA[ REST ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 30 Mar 2022 13:06:58 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/03/5f9c9b84740569d1a4ca2c3f.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/rest-api-tutorial-rest-client-rest-service-and-api-calls-explained-with-code-examples/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">REST API Tutorial – REST Client, REST Service, and API Calls Explained With Code Examples</a>
      </p><p>Você já se perguntou como funciona o login/inscrição em um site da web no back-end? Ou ainda, quando você procura por "gatinhos fofinhos" no YouTube, você recebe vários resultados e consegue reproduzi-los pelo stream a partir de uma máquina remota?</p><p>Neste guia para iniciantes, mostrarei para você o processo de configurar uma API RESTful. Tiraremos do caminho um pouco do jargão e examinaremos como programar um servidor no NodeJS. Vamos analisar mais a fundo o JavaScript!</p><h2 id="tirando-o-jarg-o-do-caminho"><strong>Tirando o jargão do caminho</strong></h2><p>Então, o que é REST? De acordo com a <a href="https://pt.wikipedia.org/wiki/REST">Wikipédia</a>:</p><blockquote><strong><strong>Representational state transfer</strong></strong> (<strong><strong>REST</strong></strong>), em português <strong>Transferência Representacional de Estado</strong>, é um estilo de arquitetura de software que define um conjunto de restrições a serem usadas na criação de Web services (serviços Web). Os Web Services que estão em conformidade com o estilo arquitetural REST, denominados Web services <em>RESTful,...</em> permitem que os sistemas solicitantes acessem e manipulem representações textuais dos recursos da web usando um conjunto uniforme e predefinido de operações sem estado</blockquote><p>Vamos desmistificar o conteúdo (esperamos que você tenha lido tudo isso). REST é, basicamente, um conjunto de regras de comunicação entre um client e um servidor. Existem algumas restrições na definição de REST:</p><ol><li><strong>Arquitetura c<strong>lient-</strong>servidor</strong>: a interface de usuário do site da web/aplicação deve ser separada da solicitação/armazenamento dos dados, de modo que cada parte possa ser dimensionada individualmente.</li><li><strong>Ausência de estado</strong>: a comunicação não deve ter um contexto de client armazenado no servidor. Isso quer dizer que cada solicitação ao servidor deve ser feita com todos os dados solicitados e que não se deve presumir que o servidor possua dados de solicitações anteriores.</li><li><strong>Sistema em camadas</strong>: o client não deve poder distinguir se está se comunicando diretamente com o servidor ou por meio de algum intermediário. Esses servidores intermediários (sejam um proxy, sejam balanceadores de carga) permitem a escalabilidade e a segurança do servidor subjacente.</li></ol><p>Certo, agora que sabemos o que são os sistemas RESTful (em conformidade com o padrão REST), explicaremos alguns dos termos que usamos no título:</p><ol><li><strong>Client <strong>REST</strong></strong>: código ou uma aplicação que pode acessar esses serviços REST. Você está usando um nesse exato momento! Sim, o navegador pode agir como um client REST não controlado (o site da web trata das solicitações do navegador). O navegador, por muito tempo, usava uma função integrada chamada XMLHttpRequest para todas as solicitações REST. Agora, essa função teve como sua sucessora a <a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API"></a><a href="https://developer.mozilla.org/pt-BR/docs/Web/API/Fetch_API">FetchAPI</a>, uma abordagem moderna e baseada em <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise"></a><a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Promise">promises</a> às solicitações. Outros exemplos são bibliotecas de código, como o <a href="https://github.com/axios/axios">axios</a>, o <a href="https://github.com/visionmedia/superagent">superagent</a> e o <a href="https://github.com/sindresorhus/got">got</a>, ou ainda algumas aplicações dedicadas, como o <a href="https://www.postman.com/">Postman</a> (ou sua versão on-line, o <a href="https://hoppscotch.io/pt-br">Hoppscotch</a>), ou uma ferramenta de linha de comando como o <a href="https://curl.haxx.se/">cURL</a>!</li><li><strong>Serviço <strong>REST</strong></strong>: o servidor. Existem muitas bibliotecas populares que tornam fácil a criação desses servidores, como o <a href="https://expressjs.com/">ExpressJS</a> para NodeJS e o <a href="https://www.djangoproject.com/">Django</a> para Python.</li><li><strong>API <strong>REST</strong></strong>: este termo define o endpoint e os métodos que têm permissão de acesso/envio de dados ao servidor. Falaremos sobre isso em mais detalhes abaixo. Outras alternativas são o GraphQL, o JSON-Pure e o oData.</li></ol><h2 id="ok-mas-qual-a-apar-ncia-do-rest"><strong>Ok, mas qual é a aparência do REST?</strong></h2><p>Em termos muito genéricos, você pode pedir ao servidor uma determinada quantidade de dados ou pedir que ele grave alguns dados. O servidor, então, responde às suas solicitações.</p><p>Em termos de programação, existe um endpoint (um URL) em que o servidor aguarda para receber uma solicitação. Nos conectamos àquele endpoint e enviamos alguns dados a nosso respeito (lembre-se de que REST não tem estado - é <em>stateless</em> - o que não permite que dados sobre a solicitação sejam armazenados) e o servidor responde com a resposta correta.</p><p>Falar é fácil, vamos fazer uma demonstração. Usarei o Postman para mostrar uma solicitação e uma resposta:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/03/image-162.png" class="kg-image" alt="image-162" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/03/image-162.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/03/image-162.png 955w" sizes="(min-width: 720px) 720px" width="955" height="340" loading="lazy"><figcaption>Configurando uma solicitação no Postman</figcaption></figure><p>Os dados retornados estão no formato JSON (JavaScript Object Notation) e podem ser acessados diretamente.</p><p>Aqui, temos <code>https://official-joke-api.appspot.com/random_joke</code>, que é chamado de endpoint da API. Existirá um servidor escutando por solicitações àquele endpoint, como aquela que acabamos de fazer.</p><h2 id="anatomia-do-rest-"><strong>Anatomia do REST:</strong></h2><p>Certo, agora que sabemos que os dados podem ser solicitados pelo client e que o servidor responderá de modo adequado, vamos examinar como uma solicitação é feita.</p><ol><li><strong><strong>Endpoint</strong></strong>: essa, nós já sabemos. Para relembrar, no entanto, o endpoint é o URL onde o servidor REST está à escuta de solicitações.</li><li><strong><strong>M</strong>étodo</strong>: antes, eu disse que é possível solicitar dados ou modificá-los. No entanto, como o servidor sabe qual o tipo de operação o client quer realizar? O REST implementa diversos "métodos" para os diferentes tipos de solicitação, sendo os métodos abaixo os mais conhecidos:<br>- <strong><strong>GET</strong></strong>: obter (em inglês, <em>get</em>) recursos de um servidor.<br>- <strong><strong>POST</strong></strong>: criar (ou "publicar" - em inglês, <em>post</em>) recursos em um servidor.<br>- <strong><strong>PATCH </strong></strong>ou <strong><strong>PUT</strong></strong>: atualizar o recurso existente em um servidor.<br>- <strong><strong>DELETE</strong></strong>: excluir (em inglês, <em>delete</em>) um recurso de um servidor.<br></li><li><strong>Cabeçalhos</strong>: os detalhes adicionais fornecidos para a comunicação entre client e servidor (lembre-se, o REST é <em>stateless</em>). Alguns dos cabeçalhos comuns são:<br><strong>Solicitação<strong>:</strong></strong><br>- <em><em>host</em></em>: o IP do client (ou de onde veio a solicitação)<br>- <em><em>accept-language</em></em>: linguagem compreensível pelo client<br>- <em><em>user-agent</em></em>: dados sobre o client, sistema operacional e fornecedor<br><strong><strong>Respo</strong>sta</strong>:<br>- <em><em>status</em></em>: o status da solicitação ou código HTTP.<br>- <em><em>content-type</em></em>: tipo de recurso enviado pelo servidor.<br>- <em><em>set-cookie</em></em>: definição dos cookies pelo servidor.</li><li><strong><strong>Da</strong>dos</strong>: (também chamados de corpo - <em>body</em> - ou de mensagem - <em>message</em>) contêm as informações que você quer enviar ao servidor.</li></ol><h2 id="chega-de-detalhes-eu-quero-ver-o-c-digo-"><strong>Chega de detalhes – eu quero ver o código.</strong></h2><p>Vamos começar a programar um serviço REST no Node. Implementaremos tudo o que aprendemos acima. Usaremos a ES6+ para escrever/criar nosso serviço.</p><p>Não se esqueça de instalar o Node.JS e fazer com que o <code>node</code> e o <code>npm</code> estejam disponíveis no caminho que você criará. Usarei o Node 12.16.2 e o NPM 6.14.4.</p><p>Crie um diretório <code>rest-service-node</code> e entre nele usando <code>cd</code>, assim:</p><pre><code class="language-shell">mkdir rest-service-node
cd rest-service-node</code></pre><p>Inicialize o projeto do node:</p><pre><code class="language-shell">npm init -y</code></pre><p>A flag <code>-y</code> evita uma série de perguntas iniciais. Se quiser preencher todo o questionário, digite apenas <code>npm init</code>.</p><p>Vamos instalar alguns pacotes. Usaremos o framework ExpressJS para desenvolver o servidor REST. Execute o comando abaixo para instalá-lo:</p><pre><code class="language-shell">npm install --save express body-parser</code></pre><p>Para que serve o <code>body-parser</code>? O Express, por padrão, não consegue lidar com os dados enviados por uma solicitação POST como JSON. O <code>body-parser</code> permite que o Express resolva essa questão.</p><blockquote><em>Nota do tradutor: depois da atualização para a versão 4 do Express, body-parser deixou de ser necessário e o Express agora consegue fazer por si o que antes necessitava do body-parser para realizar. Isso significa que o comando acima pode ser, simplesmente, </em><code>npm install --save express</code></blockquote><p>Crie um arquivo chamado <code>server.js</code> e adicione o código abaixo:</p><pre><code class="language-js">const express = require("express");
const bodyParser = require("body-parser");

const app = express();

app.use(bodyParser.json());

app.listen(5000, () =&gt; {
  console.log(`Server is running on port 5000.`);
});
</code></pre><blockquote>Nota do tradutor: a partir da versão 4 do Express, a segunda linha do código (<code>const bodyParser = require("body-parser");</code>) não é mais necessária e você pode substituir a linha que diz <code>app.use(bodyParser.json());</code> por <code>app.use(express.json());</code>.</blockquote><p>As duas primeiras linhas são as importações de Express e de body-parser.</p><p>A terceira linha inicializa o servidor do Express e o define como uma variável chamada <code>app</code>.</p><p>A linha, <code>app.use(bodyParser.json());</code> inicializa o plug-in do body-parser <em>(ver notas do tradutor acima)</em>.</p><p>Por fim, definimos que nosso servidor escute solicitações vindas da porta <code>5000</code>.</p><h3 id="obtendo-dados-do-servidor-rest-"><strong>Obtendo dados do servidor REST:</strong></h3><p>Para obter dados de um servidor, precisamos de uma solicitação <code>GET</code>. Adicione o código a seguir <strong>antes</strong> de <code>app.listen</code>:</p><pre><code class="language-js">const sayHi = (req, res) =&gt; {
  res.send("Hi!");
};

app.get("/", sayHi);</code></pre><p>Criamos uma função <code>sayHi</code>, que recebe dois parâmetros, <code>req</code> e <code>res</code> (explicaremos isso mais tarde) e envia um 'Hi!' como resposta.</p><p><code>app.get()</code> recebe dois parâmetros, o caminho de rota e a função a ser chamada quando o caminho é solicitado pelo client. Assim, a última linha pode ser traduzida como: Oi, servidor, escute as solicitações em '/' (leia-se página inicial) e chame a função <code>sayHi</code> se uma solicitação for feita.</p><p><code>app.get</code> também nos dá um objeto <code>request</code>, contendo todos os dados enviados pelo client, e um objeto <code>response</code>, com todos os métodos através dos quais podemos responder ao client. Embora eles estejam acessíveis como parâmetros da função, a convenção de nomeação geral sugere que demos o nome de <code>res</code> para <code>response</code> e <code>req</code> para <code>request</code>.</p><p>Chega de papo. Hora de iniciar o servidor! Execute o comando abaixo:</p><pre><code class="language-shell">node server.js</code></pre><p>Se tudo der certo, você deverá ver uma mensagem no console dizendo: <em><em>Server is running on port 5000.</em></em></p><p><em><em>Not</em>a<em>: </em>você pode alterar a <em>port</em>a<em> </em>para o número que você quiser<em>.</em></em></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/03/image-160.png" class="kg-image" alt="image-160" width="600" height="400" loading="lazy"></figure><p>Abra seu navegador e acesse <code>http://localhost:5000/</code>. Você deverá ver algo assim:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/03/image-161.png" class="kg-image" alt="image-161" width="414" height="161" loading="lazy"></figure><p>Aí está! Sua primeira solicitação de <code>GET</code> foi um sucesso!</p><h3 id="enviando-dados-para-um-servidor-rest-"><strong>Enviando dados para um servidor REST:</strong></h3><p>Como discutimos anteriormente, vamos definir como implementar uma solicitação de <code>POST</code> em nosso servidor. Enviaremos dois números e o servidor retornará a soma desses números. Adicione este novo método abaixo em <code>app.get</code> :</p><pre><code class="language-js">app.post("/add", (req, res) =&gt; {
  const { a, b } = req.body;
  res.send(`The sum is: ${a + b}`);
});</code></pre><p>Aqui, enviaremos os dados em formato JSON, assim:</p><pre><code class="language-json">{
    "a":5,
    "b":10
}</code></pre><p>O que está dizendo o código:</p><p>Na linha 1, estamos invocando o método .<code>post()</code> do ExpressJS, que permite que o servidor escute solicitações de <code>POST</code>. Essa função recebe os mesmos parâmetros que o método <code>.get()</code>. A rota que passaremos é <code>/add</code>, de modo que seja possível acessar o endpoint como <code>http://your-ip-address:port/add</code>, ou, em nosso caso, <code>localhost:5000/add</code>. Colocamos nossa função em linha em vez de escrever a função em outro lugar.</p><p>Na linha 2, usamos um pouco da sintaxe da ES6 - especificamente, <a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#desestrutura%C3%A7%C3%A3o_de_objeto"></a><a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#desestrutura%C3%A7%C3%A3o_de_objeto">desestruturação</a> de objetos. Todos os dados que enviarmos por meio de solicitação serão armazenados e ficarão disponíveis no <code>body</code> do objeto <code>req</code>. Por isso, essencialmente, poderíamos ter substituído a linha 2 por algo do tipo:</p><pre><code class="language-js">const num1 = req.body.a;
const num2 = req.body.b;</code></pre><p>Na linha 3, usaremos a função <code>send()</code> do objeto <code>res</code> para enviar o resultado da soma. Novamente, estaremos usando as <em><a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Template_literals">template literals</a></em> da ES6. Hora de fazer o teste (usando o Postman):</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/03/image-163.png" class="kg-image" alt="image-163" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/03/image-163.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/03/image-163.png 941w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"></figure><p>Desse modo, enviamos os dados 5 e 10 como <code>a</code> e <code>b</code>, usando-os no corpo da solicitação. O Postman anexa esses dados à solicitação e a envia. Quando o servidor recebe a solicitação, ele analisa os dados de <code>req.body</code>, como fizemos com o código acima. O resultado é exibido na parte inferior da imagem.</p><p>Certo, vamos para a parte final do código:</p><pre><code class="language-js">const express = require("express");
// A linha a seguir não é necessária a partir da versão 4 do Express
const bodyParser = require("body-parser");

const app = express();

// A partir da versão 4 do Express, é possível substituir a linha abaixo por app.use(express.json()); 
app.use(bodyParser.json());

const sayHi = (req, res) =&gt; {
  res.send("Hi!");
};

app.get("/", sayHi);

app.post("/add", (req, res) =&gt; {
  const { a, b } = req.body;
  res.send(`The sum is: ${a + b}`);
});

app.listen(5000, () =&gt; {
  console.log(`Server is running on port 5000.`);
});
</code></pre><h2 id="client-rest-"><strong>Client REST:</strong></h2><p>Pois bem, criamos um servidor, mas como o acessamos a partir do nosso site da web ou aplicação? Aqui, as bibliotecas de client REST são úteis.</p><p>Estamos criando uma página da web que contém um formulário, onde você poderá inserir dois números e exibiremos o resultado. Vamos começar.</p><p>Primeiro, vamos alterar um pouco o arquivo <code>server.js</code>:</p><pre><code class="language-js">const path = require("path");
const express = require("express");
// A linha a seguir não é necessária a partir da versão 4 do Express
const bodyParser = require("body-parser");

const app = express();

// A partir da versão 4 do Express, é possível substituir a linha abaixo por app.use(express.json());
app.use(bodyParser.json());

app.get("/", (req, res) =&gt; {
  res.sendFile(path.join(__dirname, "index.html"));
});

app.post("/add", (req, res) =&gt; {
  const { a, b } = req.body;
  res.send({
    result: parseInt(a) + parseInt(b)
  });
});

app.listen(5000, () =&gt; {
  console.log(`Server is running on port 5000.`);
});
</code></pre><p>Importamos um novo pacote, <code>path</code>, fornecido pelo Node, para manipular <em>paths</em> (caminhos) entre plataformas. Em seguida, alteramos a solicitação de <code>GET</code> em '/' e usamos outra função disponível em <code>res</code>, chamada <code>sendFile</code>. Essa função permite que enviemos qualquer tipo de arquivo como resposta. Desse modo, sempre que uma pessoa tentar acessar '/', ela receberá nossa página <code>index.html</code>.</p><p>Por fim, alteramos nossa função <code>app.post</code> para que retorne a soma como JSON e converta <code>a</code> e <code>b</code> em números inteiros.</p><p>Vamos criar uma página html, que chamaremos de <code>index.html</code>, com um estilo básico:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;title&gt;REST Client&lt;/title&gt;
  &lt;/head&gt;
  &lt;style&gt;
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    .container {
      height: 100vh;
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
    }
    form {
      display: flex;
      flex-direction: column;
      margin-bottom: 20px;
    }
    label,
    input[type="submit"] {
      margin-top: 20px;
    }
  &lt;/style&gt;
  &lt;body&gt;
    &lt;div class="container"&gt;
      &lt;h1&gt;Simple POST Form&lt;/h1&gt;
      &lt;/h1&gt;
      &lt;form&gt;
        &lt;label&gt;Number 1:&lt;/label&gt;
        &lt;input id="num1" type="number" /&gt;
        &lt;label&gt;Number 2:&lt;/label&gt;
        &lt;input id="num2" type="number" /&gt;
        &lt;input type="submit" value="Add"/&gt;
      &lt;/form&gt;
      &lt;div class="result"&gt;Click Add!&lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>Vamos adicionar a ela uma tag <code>script</code> antes da tag de fechamento de body, para que não precisemos manter um arquivo <code>.js</code>. Começaremos escutando pelo evento de <code>submit</code> e chamaremos uma função quando esse evento ocorrer:</p><pre><code class="language-js">&lt;script&gt;
	document.addEventListener("submit", sendData);
&lt;/script&gt;</code></pre><p>Primeiro, precisamos evitar que a página seja atualizada quando o botão "Add" for clicado. Isso pode ser feito usando a função <code>preventDefault()</code>. Em seguida, obteremos o valor das entradas (dos elementos <em>input</em>) naquele instante:</p><pre><code class="language-js">function sendData(e) {
    e.preventDefault();
    const a = document.querySelector("#num1").value;
    const b = document.querySelector("#num2").value;
}</code></pre><p>Faremos a chamada ao servidor com esses valores, <code>a</code> e <code>b</code>. Usaremos a <a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API"></a><a href="https://developer.mozilla.org/pt-BR/docs/Web/API/Fetch_API">Fetch API</a>, integrada em todos os navegadores, para isso.</p><p>Fetch recebe duas entradas, o URL do endpoint e um objeto de solicitação em JSON, e retorna uma <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise"></a><a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Promise">promise</a>. Explicar ambos aqui é um pouco fora dos limites deste tutorial. Deixamos os links da MDN para você ler a respeito, portanto.</p><p>Continuando na função <code>sendData()</code>:</p><pre><code class="language-js">fetch("/add", {
        method: "POST",
        headers: {
            Accept: "application/json",
            "Content-Type": "application/json"
        },
        body: JSON.stringify({
            a: parseInt(a),
            b: parseInt(b)
        })
    })
    .then(res =&gt; res.json())
    .then(data =&gt; {
        const {
            result
        } = data;
        document.querySelector(
            ".result"
        ).innerText = `The sum is: ${result}`;
    })
    .catch(err =&gt; console.log(err));</code></pre><p>Primeiro, passamos o URL relativo ao endpoint como o primeiro parâmetro de <code>fetch</code>. Em seguida, passamos um objeto que contém o método que queremos que seja utilizado por Fetch para a solicitação - neste caso, <code>POST</code>.</p><p>Também passamos <code>headers</code> (os cabeçalhos), que fornecerão as informações sobre o tipo de dados que estamos enviando (<code>content-type</code>) e o tipo de dados que aceitaremos como resposta (<code>accept</code>).</p><p>Depois, disso, passamos o <code>body</code>. Lembra-se de que digitamos os dados como JSON quando usamos o Postman? Estamos fazendo algo semelhante aqui. Como o Express trata das entradas como strings e as processa de acordo com o <em>content-type</em> fornecido, precisamos converter nossa carga em JSON para uma string. Fazemos isso com <code>JSON.stringify()</code>. Estamos, na verdade, adicionando um cuidado a mais e transformando as entradas em números inteiros, de maneira a não causar confusão com o servidor (já que não implementamos nada que sirva como verificação de tipos de dados).</p><p>Por fim, se a <em>promise</em> (retornada por fetch) for resolvida, receberemos aquela resposta e a converteremos em JSON. Depois disso, receberemos o resultado de <code>data</code> retornado pela resposta. Aí, é uma simples questão de exibir o resultado na tela.</p><p>No fim, se a <em>promise</em> for rejeitada, exibiremos a mensagem de erro no console.</p><p>Este é o código final para <code>index.html</code>:</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;title&gt;REST Client&lt;/title&gt;
  &lt;/head&gt;
  &lt;style&gt;
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    .container {
      height: 100vh;
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
    }
    form {
      display: flex;
      flex-direction: column;
      margin-bottom: 20px;
    }
    label,
    input[type="submit"] {
      margin-top: 20px;
    }
  &lt;/style&gt;
  &lt;body&gt;
    &lt;div class="container"&gt;
      &lt;h1&gt;Simple POST Form&lt;/h1&gt;
      &lt;/h1&gt;
      &lt;form&gt;
        &lt;label&gt;Number 1:&lt;/label&gt;
        &lt;input id="num1" type="number" /&gt;
        &lt;label&gt;Number 2:&lt;/label&gt;
        &lt;input id="num2" type="number" /&gt;
        &lt;input type="submit" value="Add"/&gt;
      &lt;/form&gt;
      &lt;div class="result"&gt;Click Add!&lt;/div&gt;
    &lt;/div&gt;
    &lt;script&gt;
      document.addEventListener("submit", sendData);
      function sendData(e) {
        e.preventDefault();
        const a = document.querySelector("#num1").value;
        const b = document.querySelector("#num2").value;

        fetch("/add", {
          method: "POST",
          headers: {
            Accept: "application/json",
            "Content-Type": "application/json"
          },
          body: JSON.stringify({
            a: parseInt(a),
            b: parseInt(b)
          })
        })
          .then(res =&gt; res.json())
          .then(data =&gt; {
            const { result } = data;
            document.querySelector(
              ".result"
            ).innerText = `The sum is: ${result}`;
          })
          .catch(err =&gt; console.log(err));
      }
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><h2 id="conclus-o-"><strong>Conclusão:</strong></h2><p>Neste artigo, aprendemos sobre a arquitetura REST e sobre a anatomia de solicitações REST. Fizemos a criação de um servidor REST simples, que atende a solicitações <code>GET</code> e <code>POST</code>, e criamos uma página da web simples que usa um client REST para exibir a soma de dois números.</p><p>Você pode estender isso e usar os tipos restantes de solicitações e até mesmo implementar uma <a href="https://www.freecodecamp.org/news/building-a-simple-crud-application-with-express-and-mongodb-63f80f3eb1cd/">aplicação com CRUD no back-end</a> completa (texto de referência em inglês).</p><p>Espero que você tenha aprendido algo com este artigo. Se tiver perguntas, fique a vontade de conversar com o autor pelo <a href="https://twitter.com/vaibhav_kandwal">Twitter</a>! Feliz programação!</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
