DEV Community

Toshi Ossada for flutterbrasil

Posted on

Vamos falar de Dart no Backend?

O DART é uma linguagem de programação criada e mantida pela Google em meados de 2011 com o objetivo inicial de ser uma linguagem voltada para WEB com o intuito de substituir o Javascript, como sabemos, a Google falhou miseravelmente nesta missão, pois até recentemente (2017/2018) nem ouvíamos falar de DART, que só ficou conhecido com o desenvolvimento multiplataformas, principalmente mobile, com a vinda do Flutter.

É sabido que além de toda possibilidade e de desenvolvimento multiplataforma (Web, mobile e desktop), também conseguimos desenvolver nosso backend utilizando DART? Isso mesmo, vamos falar do Shelf!

O Shelf é um pacote criado e mantido pelo pessoal da equipe do Dart que facilita a criação e composição dos web servers, de maneira simples conseguimos criar nossas APIs Rest utilizando o protocolo HTTP.

Confira a documentação na página oficial do pub.dev: https://pub.dev/packages/shelf

Para iniciar nossa jornada com o Dart no backend, precisaremos primeiro criar um projeto dart, para isto necessitamos apenas digitar no nosso terminal digitar o comendo

dart create nome_do_projeto

No nosso pubspec precisaremos adicionar dois pacotes no nosso projeto: o shelf para levantar o servidor e o shelf_route para configuração das rotas dos nossos endpoints

Para rodar o servidor inicial basta adicionar o código a seguir

     void main() async {
         var server = await shelf_io.serve(
          (Request request) => Response(200), localhost, 8080);
         print(Serving at [http://${_server_._address_._host_}:${_server_._port_}');](http://$%7Bserver.address.host%7D:$%7Bserver.port%7D%27%29;)
     }
Enter fullscreen mode Exit fullscreen mode

O .server() é o comando de inicialização do nosso webserver, ele contém 3 parâmetros, o primeiro seria o handler que é uma função que será executado a cada requisição no servidor e deve retornar um Response com o código HTTP, o segundo é o endereço que o webserver será executado e o terceiro é a porta que ele irá ser executado

Para rodar basta executar o dart run

Para conseguirmos debuggar com o F5 no VS Code precisamos configurar nosso launch.json adicionando a propriedade “program” apontando para o arquivo dart contendo nossa main()

Com isso em um Client HTTP como o Postman podemos testar nosso serviço, podemos notar que qualquer requisição que fizermos retornará o código 200 como programamos.

Os códigos HTTP podem ser qualquer um existente

Podemos também encapsular o handle em uma função e no Response também é possível retornar um corpo

O resultado será o seguinte

Conseguimos até retornar um HTML caso seja nosso desejo, basta no body do Response passar o HTML de retorno e no header passar o {‘Content-Type’: ‘text/html’}

Se abrirmos em um browser teremos o resultado

No nosso Handler temos a propriedade request que lá temos toda a informação da nossa requisição, conseguimos através dela verificar qual foi o endpoint solicitado e retornar conforme a solicitação, também possuímos alguns métodos que irão facilitar retornar o código HTTP desejado como o ok() ou o notFound(), confira os métodos em https://pub.dev/documentation/shelf/latest/shelf/Response-class.html

Ao invés de ficarmos fazendo um monte de if’s para verificar qual o endpoint solicitado existe uma forma muito mais simples de configurarmos essa rotas utilizando o shelf_router, já adicionamos ele no nosso projeto no início desse artigo.

Para isso basta criar uma instância do Router(), configurar as rotas com os verbos HTTP e adicioná-lo no server.

O resultado será o seguinte

Podemos também adicionar middlewares que são intermediadores da nossa API que irão gerenciar as entradas e saídas. No exemplo do próprio Shelf temos o logRequests que irá gerar um log de toda requisição da API.

Para utilizar basta criar uma Pipeline e utilizar o addMidleware para adicionar na aplicação

Com isso a cada requisição irá gerar um log no console

também podemos criar nossos próprios middlewares, neste exemplo estou transformando todas as respostas em um content-type: application/json

No canal oficial do Flutter tem se falado muito sobre o Dart no backend

Monorepo (Por Que Essa Estratégia Funciona em Grandes Empresas?)

E se você pretende entrar de cabeça nesse mundo do backend, preparamos um roadmap sobre o que estudar para tornar-se um desenvolvedor backend completo
https://github.com/Flutterando/dart_backend

Image description

Entre em nosso discord para interagir com a comunidade: https://discord.com/invite/flutterbrasil
https://linktr.ee/flutterbrasil

Top comments (0)