2.4 Frameworks de desenvolvimento (REST)
2.4.11 Spark
Desenvolvida por: -
Desenhada por: Per Wendel
Desenvolvida em: Java
Criada em: Julho de 2000
Última versão estável: 2.6.0 / 25 de abril, 2017 Sistema operativo / Plataforma: Multi-plataforma
Licença: Apache License 2.0
Repositório: https://github.com/perwendel/spark
Notas:
Spark (Wendel, 2011) é uma framework desenvolvida para Java e Kotlin173. É
executada num servidor embebido web Jetty, mas pode ser congurada para ser executada noutros servidores web. Não é baseada no modelo MVC, mas sim num modelo de criação rápida de aplicações através do menor esforço. Também suporta vários sistemas de modelos (templates).
Outras características:-
2.4.12 Sinatra
Desenvolvida por: Konstantin Haase
Desenhada por: Blake Mizerany
Desenvolvida em: Ruby
Criada em: Setembro de 2007
Última versão estável: 2.0.3 / 8 de junho, 2018 Sistema operativo / Plataforma: Multi-plataforma
Licença: MIT License
Repositório: https://github.com/sinatra/sinatra/
Página ocial: http://www.sinatrarb.com/
Notas:
Sinatra (Mizerany, 2007) é uma framework desenvolvida em Ruby on Rails174 e o
seu nome é em homenagem a Frank Sinatra175. É desenvolvida em código aberto,
suporta multi-plataforma e é executada sobre a interface do servidor web Rack176.
Tal como a framework Spark não utiliza o modelo MVC (ao contrário do Ruby on 173Linguagem de programação de tipagem estática que é executada na máquina virtual Java
(JVM) e também pode ser compilada em código-fonte JavaScript ou usar a infraestrutura do compilador LLVM.
174Framework livre que promete aumentar velocidade e facilidade no desenvolvimento de sites
orientados a base de dados (database-driven web sites), uma vez que é possível criar aplicações com base em estruturas pré-denidas.
175Cantor, ator e produtor americano, sendo considerado um dos mais populares e inuentes
artistas musicais do século 20.
Rails), mas sim um modelo de desenvolvimento rápido. Outras características:-
2.4.13 Restify
Desenvolvida por: Restify team
Desenhada por: -
Desenvolvida em: Javascript; Node.js
Criada em: Maio de 2011
Última versão estável: 7.2.1 / 7 de junho, 2018 Sistema operativo / Plataforma: Multi-plataforma
Licença: MIT License
Repositório: https://github.com/restify/node-restify
Página ocial: http://restify.com/
Notas:
Restify (Team, 2011) é uma framework desenvolvida em Node.js. Está otimizada para desenvolver serviços web RESTful de alta performance. Assenta em características como: facilidade de produção de aplicações, mesmo modelo de middleware que a framework Express, facilidade de depuração e semanticamente correta (apoiada em RFC177).
Outras características:-
177Request for Comments - documentos técnicos desenvolvidos e mantidos pelo IETF (Internet
2.4.14 SailsJS
Desenvolvida por: Mike McNeil e outros
Desenhada por: -
Desenvolvida em: Javascript; Node.js
Criada em: Julho de 2012
Última versão estável: 1.1.0-3 / 24 de agosto, 2018 Sistema operativo / Plataforma: Multi-plataforma
Licença: MIT License
Repositório: https://github.com/balderdashy/sails
Página ocial: http://sailsjs.com/
Notas:
SailsJS (McNeil, 2012) é uma framework desenvolvida em Node.js.
Outras características: desenvolvida completamente em Javascript, suporta vários sistemas de base de dados, associações exíveis na modelação de dados baseadas no modelo relacional (one-to-many, many-to-many)178, auto geração de
API REST, suporte nativo de websockets179, declarativa / reutilizável / políticas
de segurança implementadas, agnóstica no frontend, pipeline180 de desenvolvimento
de assets de frontend, estrutura de base sólida (baseada em Express, socket.io181),
enorme comunidade de desenvolvimento, etc. 178Um para muitos, muitos para muitos.
179Tecnologia que permite a comunicação bidirecional por canais full-duplex sobre um único
socketTransmission Control Protocol (TCP).
180Cadeia de elementos de processamento (processos, threads, corrotinas, funções, etc.),
organizados de modo que a saída de cada elemento seja a entrada do próximo.
2.4.15 LoopBack
Desenvolvida por: StrongLoop (pertence à IBM)
Desenhada por: -
Desenvolvida em: Javascript; Node.js
Criada em: Junho de 2013
Última versão estável: 3.23.2 / outubro, 2018 Sistema operativo / Plataforma: Multi-plataforma
Licença: MIT License
Repositório: https://github.com/strongloop/loopback
Página ocial: https://loopback.io/
Notas:
LoopBack (IBM,2013) é desenvolvida em Node.js. Desenvolvida pela StronLoop182.
Outras características: desenvolvimento da stack completa, rápido desenvolvimento (assente em desenvolvimento modular), suportado pela IBM, multi-ferramentas fornecidas pela StronLoop, ORM com múltiplos connectors disponibilizados pela comunidade, controlo de acessos por utilizador baseado em roles, desenvolvido sobre Swagger, etc.
2.4.16 Gugamarket
Desenvolvida por: -
Desenhada por: Pliik
Desenvolvida em: Javascript; Node.js
Criada em: -
Última versão estável: -
Sistema operativo / Plataforma: Multi-plataforma
Licença: -
Repositório: https://github.com/pliik/gugamarket
Página ocial: https://www.gugamarket.com/
182Empresa americana que pertence à IBM e trabalha com o Node.js para criar e oferecer
Notas:
Gugamarket (Pliik, 2015) é uma framework desenvolvida em Node.js.
Outras características: baseado em várias tecnologias base como: Express, Swagger, Mongoose183, Jade184, Passwordless185 e Mocha186, desenvolvimento da
stack completa, etc.
2.4.17 Grails
Desenvolvida por: Graeme Rocher
Desenhada por: -
Desenvolvida em: Java; Groovy
Criada em: Outubro de 2005
Última versão estável: 3.3.8 / 10 de agosto, 2018 Sistema operativo / Plataforma: Multi-plataforma
Licença: Apache License 2.0
Repositório: https://github.com/grails/grails-core
Página ocial: http://grails.org/
Notas:
Grails (Rocher, 2011) é uma framework desenvolvida em Groovy e baseada em Spring boot.
Outras características: baseada em Spring boot, curva de aprendizagem rápida, fácil integração com Java, integrada com GORM187 / API REST / React188 /
Angular189, extensível através da utilização de plugins, tecnologias de apresentação
183Servidor web embebido multi-plataforma e biblioteca de rede com funções TCP, cliente e
servidor HTTP, cliente e servidor websocket, cliente MQTT, etc.
184Linguagem de programação orientada a objetos que possui uma grande integração com um
sistema de gestão de base de dados orientado a objetos.
185Autenticação por token via correio eletrónico.
186Framework de testes Javasript para programas desenvolvidos em Node.js. 187ORM do Grails.
188Biblioteca JavaScript de código aberto para criar interfaces de utilizador.
189Plataforma de desenvolvimento de aplicações web de código aberto e frontend baseado
em TypeScript liderado pela equipa Angular da Google e por uma comunidade de indivíduos e corporações.
View190, código aberto, capacidades de desenvolvimento assíncrono, linguagens
Domain-Specic191 e suporte para diferentes IDE192.
2.4.18 Conclusão
Framework Linguagem de
programação Especíca para REST Django REST Framework Python Sim
Flask-RESTful Python Sim
Laravel PHP Não
Zend Framework PHP Não
CakePHP PHP Não
Restlet Java Sim
Spark Java Não
Sinatra Ruby on Rails Não
Express Node.js Não
Restify Node.js Sim
SailsJS Node.js Não
LoopBack Node.js Sim
Gugamarket Node.js Sim
Spring boot Groovy Não
Grails Groovy Não
Phoenix Erlang Não
Tabela 2.9 Frameworks de desenvolvimento (REST)
Na resolução de problemas e implementação de novas soluções, os programadores podem enveredar por várias vias: desenvolver uma solução própria ou utilizar bibliotecas cuidadosamente selecionadas ou ainda utilizar uma framework. Como o problema a resolver tem grandes probabilidades de ser um problema com solução já existente, torna-se cara e demorada a implementação de uma solução de raiz, só sendo válida essa implementação se for um problema único e sem solução existente. Normalmente o código fonte das frameworks não pode ser alterado, no entanto costumam ser fornecidos mecanismos de extensão que permitem o desenvolvimento de novos componentes. De entre as frameworks revistas algumas são especícas para
190Tecnologia que permite gerar HTML, JSON e XML a partir de GSP, JSON Views e
Markup Views.
191Linguagem de computador especializada para um domínio de aplicação especíco, em
contraste a uma linguagem de propósito geral.
REST e outras podem facilmente ser estendidas para a utilização em API REST (vid. tabela2.9). A utilização de frameworks também trás facilidade em termos de controlo do uxo de desenvolvimento.
2.5 Microserviços
2.5.1 Introdução
A implementação de serviços web pode utilizar duas abordagens: arquitetura monolítica ou microserviços. Nesta secção serão apresentados os conceitos de arquitectura monolítica e de microserviços e será exposta a sua relevância no desenvolvimento de serviços web.