REST não é simplesmente retornar JSON: indo além com APIs REST \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 14 Horas 

 01 Min 

 22 Seg 

   Tempo restante da oferta: 14 01 22 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) REST não é simplesmente retornar JSON: indo além com APIs REST  [ Web Services ](https://www.treinaweb.com.br/blog/categoria/web-services) 

# REST não é simplesmente retornar JSON: indo além com APIs REST

 Criar uma API REST não tem a ver com retornar JSON e sim com a correta utilização do protocolo HTTP.

 [ Cleber Campomori ](https://www.treinaweb.com.br/blog/autor/cleber-campomori) 10 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/web-2185247_640.jpg)  

É até comum, de certa forma, ouvirmos alguém falar que construiu uma [API](https://www.treinaweb.com.br/blog/o-que-e-uma-api/ "API") REST porque acabou disponibilizando um *endpoint* que retorna alguma informação no formato [JSON](https://www.treinaweb.com.br/blog/o-que-e-json/ "JSON"). Mas isso, infelizmente, é um equívoco. Criar uma API REST nada tem a ver com simplesmente retornar algum JSON.

Neste post, vamos discutir sobre os conceitos de REST e JSON e verificar que, apesar de serem conceitos muito íntimos hoje, tecnicamente um não não tem nada a ver com o outro.

[  ![Lógica Orientada a Objetos - Primeiros Passos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/logica-oo.svg)   Curso Lógica Orientada a Objetos - Primeiros Passos Conhecer o curso ](https://www.treinaweb.com.br/curso/logica-orientada-a-objetos-primeiros-passos)

## Mas, afinal de contas, o que é REST?

![prédio com fachada espelhada](https://d2m498l008ebpa.cloudfront.net/2017/05/building-922529_640.jpg)*Hmmm, pelo jeito é algo arquitetural…*

REST é um acrônimo para *REpresentational State Transfer*, ou seja, *Transferência de Representação de Estado*. O REST é, no final das contas, um estilo arquitetural que podemos utilizar ou não em nossas aplicações.

O conceito do REST foi criado pelo norte-americano *Roy Fielding*. Roy é também um dos principais responsáveis pela especificação técnica do protocolo HTTP. Sim, esse mesmo protocolo que você está utilizando nesse exato momento para visualizar esta página em nosso blog. A idéia do REST é utilizar de maneira mais eficiente e em sua plenitude as características do protocolo [HTTP](https://www.treinaweb.com.br/blog/o-que-e-http-request-get-post-response-200-404/ "HTTP"), principalmente no que diz respeito à semântica do protocolo. O resultado disso ao final das contas é, além da utilização mais “correta” do protocolo, um trânsito de informações mais eficiente e, por consequência, mais rápido.

## Mas quais são as características do protocolo HTTP?

![fios rj45 ligados em servidores](https://d2m498l008ebpa.cloudfront.net/2017/05/network-197303_640.jpg)

O protocolo HTTP, por decorrência de sua arquitetura, possui algumas características bem marcantes:

- **É um protocolo cliente-servidor**: o protocolo HTTP se caracteriza por uma conexão feita entre uma máquina cliente e uma máquina servidora. Quando você acessa o nosso blog, por exemplo, você está fechando uma via de comunicação entre a sua máquina com o nosso servidor. É através dessa conexão que seu browser baixa o HTML, o CSS, o JavaScript e as imagens necessárias para renderizar a página solicitada;
- **A comunicação entre o cliente e o servidor é feita através de “mensagens HTTP”**: o tráfego de dados entre um cliente e um servidor é feito através de porções de informação chamadas *mensagens*. Em uma “rodada” de comunicação, nós temos duas mensagens envolvidas: a mensagem enviada pelo cliente solicitando algo, chamada de *request*; e a resposta do servidor para a solicitação realizada, chamada de *response*. Estes dois componentes são essenciais para que a comunicação ocorra seguindo o protocolo HTTP e não é possível ter um *request* sem que depois haja um *response* e vice-versa;
- **O protocolo HTTP por definição não é “keep alive”**: por padrão, uma conexão HTTP só dura até o momento em que o ciclo *request-response* é concluído. Logo após este ciclo, a conexão é automaticamente encerrada, ou seja: a conexão morre. Caso algum novo conteúdo precise ser trafegado entre o cliente e o servidor, uma nova conexão é aberta. Hoje, até existe maneiras de se modificar esse comportamento utilizando-se algumas *flags* na requisição (uma destas flags se chama justamente *keep-alive*), mas é importante destacar que o protocolo originalmente não foi planejado para essa finalidade;
- **O protocolo HTTP é utilizado de maneira assíncrona na maioria dos clientes:** requisições HTTP são assíncronas por definição do lado dos clientes. Isso quer dizer que, se você precisa disparar duas requisições para baixar dois conteúdos distintos, o cliente pode disparar essas requisições ao mesmo tempo, sendo que cada uma delas pode ser respondida em um tempo diferente. O protocolo HTTP foi concebido para funcionar desta forma. Inclusive, quando você renderiza uma página, você pode verificar este comportamento observando a aba “Network” do *Web Inspector* se você utiliza browsers baseados no WebKit/Blink, como o Chrome:

![grafico de requisições http](https://d2m498l008ebpa.cloudfront.net/2017/05/Captura-de-Tela-2017-05-22-a-s-12.25.46.png)

Na figura acima, temos a inspeção do carregamento da página inicial do nosso blog. Cada um dos componentes listados abaixo do gráfico representa um componente que foi solicitado ao servidor, ou seja: houve um ciclo de requisição HTTP para a obtenção de cada um daqueles componentes, sendo que cada ciclo deste foi transmitido dentro de uma conexão própria ao servidor. O gráfico acima mostra o momento que a requisição foi disparada, bem como quanto tempo o servidor demorou para devolver a *response* correspondente.

Veja que no gráfico acima, podemos notar que o browser dispara várias requisições ao mesmo tempo, sendo que cada uma tem sua resposta em seu devido tempo. Isso prova que o protocolo HTTP é tratado de maneira assíncrona. Esse processo, inclusive, é chamado de *pipelining*.

Se você já lidou com AJAX por exemplo, já deve ter ouvido falar sobre o termo *callback*. Nós precisamos apelar para *callbacks* (ou *promisses* ou *observables*) justamente por causa desta característica do protocolo HTTP: nós precisamos de uma resposta do servidor, mas, pelo cliente fazer a requisição de maneira assíncrona, nós não sabemos exatamente quando essa resposta vai chegar… Por isso criamos *callbacks* (ou *promisses* ou *observables*) para serem executados quando o ciclo *request-response* for finalmente concluído.

- **As conexões no protocolo HTTP são independentes:** como as conexões são abertas e fechadas a medida que algum conteúdo precisa ser trafegado, as conexões acabam sendo independentes umas das outras. Junto à característica assíncrona do protocolo HTTP, isso torna tecnicamente inviável que uma conexão possa “se comunicar” com alguma outra que esteja em curso, ou mesmo conhecer quais outros ciclos *request-response* estão em curso em determinado momento;
- **O protocolo HTTP é “stateless”:** por decorrência dos três últimos pontos, nós afirmamos que o protocolo HTTP é *stateless*, ou seja, ele não guarda estado das requisições. Mais uma vez, isso é inviável, já que as conexões HTTP são independentes, assíncronas e, principalmente, por não serem *keep alive*. Se a conexão é imediatamente fechada após sua utilização, como podemos guardar alguma informação sobre ela? É exatamente por essa característica do protocolo HTTP que acabamos utilizando técnicas (como os *cookies*) para tentar guardar alguma informação necessária, como o usuário que está logado em uma aplicação por exemplo.
- **O protocolo HTTP é semântico:** os recursos que podem ser disponibilizados por um servidor HTTP (como um página, por exemplo) podem ser acessados através de URIs (*Unique Resource Identifier*), que podem ser “traduzidas” para URLs (*Unique Resource Locator*). O grande ponto é que um servidor Web pode disponibilizar não somente páginas, ele também pode, por exemplo, fazer um upload de um arquivo. Para traduzir o que deve ser feito no servidor, o protocolo HTTP disponibiliza algo que nós chamamos de *verbo* ou *método* HTTP. A idéia é que esse verbo, associado ao *request*, indique o que deve ser feito no servidor.

Nós temos vários verbos HTTP, mas os principais, de maneira sucinta, são:

1. **GET**: indica que um recurso será recuperado do servidor. Por exemplo, quando você solicita uma página pelo seu browser;
2. **POST**: indica que um recurso será inserido ou criado no servidor. Um upload de um novo arquivo, por exemplo;
3. **PUT**: indica que um recurso será atualizado no servidor. Seria equivalente a um *update* em uma base de dados;
4. **DELETE**: indica que um recurso será removido do servidor. Seria o equivalente a um *delete* em uma base de dados.

Isso quer dizer que nós podemos invocar uma mesma URL (ou URI) em uma requisição HTTP, porém, dependendo da atribuição do verbo HTTP, a requisição irá desempenhar uma tarefa diferente no servidor. O verbo HTTP acaba determinando a *semântica* - ou *significado*/*intenção* - da requisição HTTP.

[  ![C# (C Sharp) - APIs REST com ASP.NET Web API](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/csharp.svg)   Curso C# (C Sharp) - APIs REST com ASP.NET Web API Conhecer o curso ](https://www.treinaweb.com.br/curso/c-sharp-apis-rest-com-asp-net-web-api)

## E o JSON? Onde ele entra na jogada?

![tricicolo](https://d2m498l008ebpa.cloudfront.net/2017/05/tricycle-691587_640.jpg)

O JSON (*JavaScript Object Notation*) não é um protocolo de transporte de informações como o HTTP. Ele é somente uma forma bem leve de representação e troca de informações. Ele tem a única função de levar informações de um lado para o outro. Nós podemos utilizar o JSON para transportar informações entre mensagens HTTP.

#### JSON x XML

![focas brigando](https://d2m498l008ebpa.cloudfront.net/2017/05/crawl-1076324_640.jpg)*Mas calma! A “treta” não precisa começar, rs*

O XML também é uma forma de representação de informações. Porém, é uma forma mais “pesada” e verbosa de representação, já que preza pela “legibilidade” das informações a serem representadas.

Veja, por exemplo, um fragmento de um XML:

```xml

        1
        TreinaWeb Cursos
        10

```

A mesma informação acima poderia ser representada facilmente com o JSON abaixo:

```json
"clientes" : [
    {
        "id" : 1,
        "nome" : "TreinaWeb Cursos",
        "idade" : 10
    }
]

```

Veja que, apesar de não ser tão explícita, a forma de representação com o JSON é muito mais direta e simples do que através do XML. Perceba também a quantidade de caracteres utilizados em cada uma das representações… Isso é um ponto muito importante! Como o JSON utiliza menos caracteres que o [XML](https://www.treinaweb.com.br/blog/o-que-e-xml/ "XML"), ele também vai ocupar menos bytes dentro de um response com relação ao XML e, por consequência, o download de um *response* que contenha dados no formato JSON será mais rápido do que um *response* com as mesmas informações no formato XML. Essa é uma das principais justificativas para os desenvolvedores preferirem utilizar JSON do que XML para o intercâmbio de informações.

Caso queria se aprodundar nas diferenças entre ambos, aconselho a leitura de nosso artigo sobre [JSON x XML](https://www.treinaweb.com.br/blog/json-vs-xml/ "JSON x XML").

#### Então, o REST e o JSON possuem responsabilidades completamente diferentes!?

![Uma mulher levando agua no rosto](https://d2m498l008ebpa.cloudfront.net/2017/05/refreshment-438399_640.jpg)*Me desculpa se isso foi um balde de água fria… :(*

Sim, exatamente esse é o ponto! REST é um conceito arquitetural muito complexo, mas que no fim visa tirar vantagem de todas as características do protocolo HTTP, que é um protocolo de transporte. O JSON é somente uma forma de representar informações que precisam ser transportadas de um lado para outro. Sendo assim, podemos utilizar o protocolo HTTP para fazer o transporte de dados entre um cliente e um servidor.

Para conseguir utilizar o protocolo HTTP da forma correta, nós podemos adotar uma arquitetura baseada no REST. Agora, para fazer a representação das informações que precisam ser transportadas através do protocolo HTTP em uma arquitetura REST, nós podemos utilizar o JSON.

#### Mas então, eu posso ter uma API REST que responde XML?

![foto de uma mulher](https://d2m498l008ebpa.cloudfront.net/2017/05/amazed-19214_640.jpg)*Isso pode ser interessante…*

Absolutamente, sim! Você, neste caso, só estará alterando a forma como as informações serão representadas nas requisições HTTP. Lembre-se: as responsabilidades do HTTP, do REST, do JSON e do XML são completamente diferentes. Isso, inclusive, é um trunfo da arquitetura REST: a representação das informações e o modo de transporte destas são completamente desacopladas.

Inclusive, é muito comum que APIs aceitem dados tanto no formato XML quanto no formato JSON, além de também responderem nestes dois formatos. As linguagens modernas hoje praticamente oferecem suporte nativo ao formato JSON, o que faz com que a adoção deste seja mais popular. Mas muitos sistemas, principalmente os sistemas legados, ainda são fundamentados no formato XML. Por isso é interessante que as APIs respondam nos dois formatos. Inclusive, as APIs definem a forma como vão fazer a leitura das informações com base no formato com que estas estão representadas, bem como definem o formato de dados a ser utilizado para a resposta, em uma etapa chamada *content negociation*.

#### “Perceba a petulância do protocolo HTTP!”

![Foto de um cavalo](https://d2m498l008ebpa.cloudfront.net/2017/05/horse-1201143_640.jpg)*Do clássico meme “Percebe, Ivair, a petulância do cavalo!”*

E ele é petulante com muita razão, haha. Afinal, toda a web hoje é fundamentada nele. Qualquer transporte de informação que for necessário entre aplicações hoje em dia passará pelo HTTP. Perceba como as características dele justificam muitas coisas que nós sem querer fazemos no automático quando estamos desenvolvendo soluções baseadas na Web.

Eu costumo dizer que entender os princípios básicos do protocolo HTTP é importantíssimo para qualquer desenvolvedor Web hoje em dia. Quando o desenvolvedor sabe como que as coisas “funcionam por baixo dos panos”, ele se preocupa mais com a maneira como ele vai desenvolvedor, além de entender bem melhor o porquê de algumas coisas serem do jeito que são.

Agora, deixa eu aproveitar o momento para fazer um “jabá”, hahaha: sabia que temos aqui no [TreinaWeb](https://www.treinaweb.com.br/) um [curso sobre o protocolo HTTP](https://www.treinaweb.com.br/curso/introducao-ao-http)? Se você se interessar:

[  ![Desenvolvedor ASP.NET Full-Stack](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/csharp.svg)   Formação Desenvolvedor ASP.NET Full-Stack Conhecer a formação ](https://www.treinaweb.com.br/formacao/desenvolvedor-aspnet-full-stack)

- [ #Arquitetura de Software ](https://www.treinaweb.com.br/blog/tag/arquitetura-de-software)
- [ #API ](https://www.treinaweb.com.br/blog/tag/api)
- [ #HTTP ](https://www.treinaweb.com.br/blog/tag/http)
- [ #REST ](https://www.treinaweb.com.br/blog/tag/rest)
- [ #JSON ](https://www.treinaweb.com.br/blog/tag/json)
- [ #XML ](https://www.treinaweb.com.br/blog/tag/xml)

Autor

 ![Cleber Campomori](//secure.gravatar.com/avatar/c659c6a58478cad5b7751370ba94205f?d=mm)

## Cleber Campomori

 Líder de Conteúdo/Inovação. Pós-graduado em Projeto e Desenvolvimento de Aplicações Web. Certificado Microsoft MCSD (Web). 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/cleber-campomori)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/ROTAS-EXPRESS-400x280.png)  [ Javascript ](https://www.treinaweb.com.br/blog/categoria/javascript) 

     6 anos atrás

    ##  [ Criando Rotas com Express.js ](https://www.treinaweb.com.br/blog/criando-rotas-com-express-js) 

     Vamos aprender a configurar rotas com o Express.js, com exemplos utilizando as requisições GET, POST, PUT e DELETE.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/05/NEST-JS-UPLOAD-ARQUIVOS-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     3 anos atrás

    ##  [ Guia do framework NestJS ](https://www.treinaweb.com.br/blog/guia-do-framework-nestjs) 

     Neste guia do framework NestJS vamos fazer um compilado de tópicos úteis sobre o framework, desde criar um projeto básico até autenticação.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/01/criando-uma-api-com-spring-data-jpa-e-spring-web-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     5 anos atrás

    ##  [ Criando uma API com Spring Data JPA e Spring Web ](https://www.treinaweb.com.br/blog/criando-uma-api-com-spring-data-jpa-e-spring-web) 

     Neste artigo vamos aprender como criar uma API com persistência de dados utilizando o Spring Web MVC e o Spring Data JPA.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/05/NEST-JS-UPLOAD-ARQUIVOS-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     3 anos atrás

    ##  [ Trabalhando com eventos no NestJS ](https://www.treinaweb.com.br/blog/trabalhando-com-eventos-no-nestjs) 

     Neste artigo vamos aprender a utilizar os eventos com o NestJS, criando um exemplo onde vamos simular o envio de e-mails.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/12/BFF-400x280.jpg)  [ Arquitetura de Software ](https://www.treinaweb.com.br/blog/categoria/arquitetura-de-software) 

     4 anos atrás

    ##  [ O que é BFF? ](https://www.treinaweb.com.br/blog/o-que-e-bff) 

     Conheça neste artigo o pattern arquitetural BFF (Backend For Frontend).

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/11/ARTIGO-DART-400x280.jpg)  [ Dart ](https://www.treinaweb.com.br/blog/categoria/dart) 

     4 anos atrás

    ##  [ Guia da linguagem dart ](https://www.treinaweb.com.br/blog/guia-da-linguagem-dart) 

     Nesse guia da linguagem Dart você aprenderá o necessário para criar os seus primeiros softwares com a linguagem de programação Dart.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/09/o_que_e_o_django_rest_framework-400x280.png)  [ Django ](https://www.treinaweb.com.br/blog/categoria/django) 

     6 anos atrás

    ##  [ O que é o Django REST Framework? ](https://www.treinaweb.com.br/blog/o-que-e-o-django-rest-framework) 

     Veja neste artigo o que é o Django REST Framework.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/07/05112250/SPRING-BOOT-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ Criando uma API REST com o Spring Boot ](https://www.treinaweb.com.br/blog/criando-uma-api-rest-com-o-spring-boot) 

     Todos os passos da criação de uma API REST com o framework Spring Boot do Java, no Visual Studio Code.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/06/o-que-e-hateoas-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     6 anos atrás

    ##  [ O que é HATEOAS? ](https://www.treinaweb.com.br/blog/o-que-e-hateoas) 

     HATEOAS é um componente que faz parte da arquitetura REST, cujo objetivo é ajudar os clientes a consumirem uma API sem a necessidade de conhecimento prévio.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/04/CONFIGURAÇÃO-AMBIENTE-MACOS-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Configurando ambiente de desenvolvimento Django no macOS ](https://www.treinaweb.com.br/blog/configurando-ambiente-de-desenvolvimento-django-no-macos) 

     Veja neste artigo como configurar seu ambiente de desenvolvimento macOS para desenvolvimento rest com Django.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/04/configurando-ambiente-de-desenvolvimento-python-no-linux-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Configurando ambiente de desenvolvimento Django no Linux ](https://www.treinaweb.com.br/blog/configurando-ambiente-de-desenvolvimento-django-no-linux) 

     Veja neste artigo como configurar seu ambiente de desenvolvimento linux para desenvolvimento rest com Django.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/04/configurando-ambiente-de-desenvolvimento-python-no-windows-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Configurando ambiente de desenvolvimento Django no Windows ](https://www.treinaweb.com.br/blog/configurando-ambiente-de-desenvolvimento-django-no-windows) 

     Veja neste artigo como configurar seu ambiente de desenvolvimento Windows para desenvolvimento rest com Django.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **14h 01min 22s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
