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;)
}
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
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
Entre em nosso discord para interagir com a comunidade: https://discord.com/invite/flutterbrasil
https://linktr.ee/flutterbrasil
Top comments (0)