de aplicações web
Unidade 2
Construção
de serviços web
Arquitetura
de aplicações web
Unidade 2
Construção
de serviços web
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Unidade 2 Construção
de serviços web
Objetivo de aprendizagem:
Esta unidade tem como objetivo apresentar técnicas de programação que ensinam a desenvolver
serviços web.
Tópicos de estudo:
• Principais frameworks;
• Versionamento de código;
• Depuração.
Iniciando os estudos:
No entanto, os frameworks não são as únicas ferramentas que auxiliam os desenvolvedores. Ferra-
mentas como o git auxiliam as equipes com o versionamento dos códigos que estão sendo desenvol-
vidos, bem como favorecem também o trabalho colaborativo.
3
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
1 PRINCIPAIS FRAMEWORKS
Cada vez mais a arquitetura REST vem sendo empregada para a construção de serviços web. Dessa
forma, diferentes frameworks foram desenvolvidos e dão aos programadores modos mais simples de
implementação de aplicações em conformidade com a arquitetura REST.
Nesse tópico, você irá conhecer alguns dos principais frameworks que se destinam à implementação de
serviços REST e fazem uso das linguagens Python, Java e Ruby. Os frameworks aqui apresentados serão:
Django REST Framework, Flask RESTful, Restlet, Spark e Sinatra, mas antes separei para você um vídeo
que apresenta os principais conceitos que envolvem um framework.
Aprofunde-se
Título: Frameworks
Acesso em: 28/06/2020.
Disponível em: https://bit.ly/3eHVJMG
4
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Segundo Sousa (2015), esse framework tem como um de seus principais pontos fortes sua capaci-
dade de construção dos serviços por meio de vistas baseadas em classes, o que permite construir,
de um modo praticamente automático, uma API por meio de modelos de recursos disponíveis, não
sendo necessária a lógica de cada um dos endpoints disponibilizados.
Aprofunde-se
Neste material, você irá encontrar uma completa documentação do Django, esse que é
um dos mais robustos frameworks.
Título do artigo: Documentação do Django
Link: https://docs.djangoproject.com/en/3.0/
Dada a robustez desse framework e sua importância nos diferentes ambientes de desenvolvimento,
separei para você a documentação completa dessa ferramenta.
Agora que você possui um substancial conhecimento acerca do Django framework, o vídeo a seguir irá
fazer uso desta na construção de um blog passo a passo.
Aprofunde-se
Título: Django: Construindo um Blog em Minutos
Acesso em: 15/07/2020.
Disponível em: https://youtu.be/eK2sfDWQUXc
5
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
De acordo com Sousa (2015), o Flask RESTful permite abstrair as tarefas relacionais com o protocolo
HTTP, sendo completamente independente da lógica de negócio da aplicação, o que permite aos desen-
volvedores implementar serviços tendo em conta suas necessidades e preferências.
Segundo o site Flask RESTful (2020), o Flask RESTful é uma extensão do Flask que adiciona suporte para a
criação rápida de APIs REST. Nele você encontra a completa documentação deste framework que pode
auxiliá-lo em seus futuros trabalhos.
Munido de um conhecimento acerca do Flask RESTful, o vídeo a seguir irá ensinar você a construir uma
API fazendo uso desse framework.
Aprofunde-se
Título: Building Web APIs - Using Flask RESTful
Acesso em: 05/07/2020.
Disponível em: https://youtu.be/bc3j7L_1YQU
6
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
1.3 RESTLET
O Restlet é um framework open source voltado para o desenvolvimento de APIs REST em linguagem Java,
tanto do lado do servidor quanto do lado do cliente em uma mesma API, o que reduz a curva de apren-
dizagem dos diferentes componentes do sistema.
Segundo Sousa (2015), ao fazer uso do framework, a distribuição do serviço torna-se flexível, possibi-
litando incluir o módulo relativo à interface REST numa aplicação Java já existente ou disponibilizá-lo
apenas como uma aplicação de servidor que pode ser integrada a um servidor HTTP.
Dada a robustez do framework Restlet, o site Restlet Talend (2020) traz uma completa documentação do
Restlet Framework.
Agora que você já conhece o Restlet Framework, o vídeo a seguir irá ensiná-lo a trabalhar com esta ferra-
menta passo a passo.
Aprofunde-se
Título: Introduction to the Restlet Framework
Acesso em: 15/07/2020.
Disponível em: https://youtu.be/t8kn5UaO8FU
7
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
1.4 SPARK
O Spark é um microframework voltado para o desenvolvimento de serviços REST em linguagem Java
que tem como principal objetivo proporcionar às equipes de desenvolvimento agilidade e velocidade na
implementação de serviços web.
Segundo Sousa (2015), o Spark é um microframework bastante minimalista e que oferece o suporte
necessário ao desenvolvimento de serviços como gestão de diferentes rotas, manipulação de pedidos
de HTTP e suas respectivas respostas, gestão de dados de sessão, além de oferecer a renderização de
templates de Java Server Pages (JSP).
O microframework Spark é uma ferramenta bastante ampla. Desse modo, a fim de que você possa conhecer
com mais detalhes, o site Spark Java (2020) possui uma documentação completa para sua consulta.
Agora que você teve seu primeiro contato com o framework Spark, o vídeo a seguir irá apresentar
alguns exemplos práticos deste framework.
8
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Aprofunde-se
Título: Quick introduction to Apache Spark
Acesso em: 15/07/2020.
Disponível em: https://bit.ly/3euVsMu
1.5 SINATRA
O framework Sinatra é uma ferramenta gratuita e open source desenvolvida na linguagem de progra-
mação Ruby. De acordo com Sousa (2015), esse framework tem como objetivo permitir a implementação
de serviços REST de forma rápida e acessível, sendo ao mesmo tempo elegante, leve e minimalista.
Diferentemente do que ocorre com outros frameworks, o Sinatra não faz uso do padrão do Model-View-
-Controller, pois ele tem como objetivo ser o mais simples e flexível possível, proporcionando aos desen-
volvedores uma forma de implementação dos serviços empenhando o menor esforço possível.
A fim de aprofundar seus conhecimentos sobre esse framework, você pode consultar a documentação
oficial por meio do material a seguir:
Aprofunde-se
Este artigo traz a documentação completa do framework Sinatra.
Título do artigo: Documentação do Sinatra
Link: http://sinatrarb.com/documentation.html
Após você estudar alguns dos diferentes tipos de frameworks voltados ao desenvolvimento com uso da
arquitetura REST, seria possível compará-los? O que uma possível comparação seria capaz de revelar? A
fim de responder a essa pergunta, separei para você o seguinte material em vídeo e em tabela:
Assista
Acesse na plataforma o vídeo: Comparação de frameworks
9
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
2 VERSIONAMENTO DE CÓDIGO
O processo de desenvolvimento de software envolve a produção de inúmeros arquivos de códigos
computacionais executados pelo sistema operacional ou por algum compilador. Além disso, é comum
o processo de desenvolvimento envolver inúmeras entregas de pequenas partes do software, uma vez
que cada uma dessas versões constitui uma versão do software.
Não é uma tarefa fácil gerenciar milhares de linhas e arquivos de códigos referentes à implementação
de um projeto, tanto que o uso inadequado de uma determinada versão pode ocasionar um compor-
tamento inesperado do software, implicando em diferentes tipos de perdas, sejam elas financeiras, de
disponibilidade do serviço, entre tantas outras.
Uma vez que o controle manual do versionamento dos arquivos referentes ao desenvolvimento de um
software se mostra excessivamente trabalhoso e ineficiente, se faz necessário o uso de tecnologias para
esse fim. Nesse sentido, diferentes ferramentas de controle de versões foram desenvolvidas, sendo a
mais utilizada atualmente a git, devido a sua robustez.
10
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
De acordo com o Zup (2019), a principal funcionalidade que faz com que o git seja amplamente
empregado em projetos de desenvolvimento de software consiste na capacidade dele de realizar o
controle de versões de modo colaborativo.
O vídeo a seguir faz uma explanação inicial sobre o git e sua importância na rotina dos desenvolvedores:
Aprofunde-se
Título: Git - sistema de controle de versões distribuído
Acesso em: 28/06/2020.
Disponível em: https://bit.ly/3idcKAz
Ao fazer uso do git e seu modo colaborativo, dois desenvolvedores trabalham em um mesmo arquivo
sem que ocorra a sobrescrita de código. Portanto, os desenvolvedores podem estar implementando
funcionalidades distintas, ou corrigindo bugs, e ao mesmo tempo mesclarem os arquivos que não terão
qualquer tipo de problema.
Conforme o Zup (2019), o git faz uso do conceito de ramificação (branch) em que cada ramificação
consiste em uma linha do tempo dotada de marcos (commits), e em cada um dos branchs os arquivos
podem ser alterados pelo desenvolvedor sem causar impactos nas outras ramificações.
A figura a seguir mostra quatro ramos sendo atualizados em paralelo por diferentes desenvolvedores
ao longo do tempo por meio de marcos (commits) e, posteriormente, o branch feature por meio do
processo de merge sendo mesclado no branch develop.
11
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Talvez alguns termos do parágrafo anterior tenham lhe chamado a atenção, tais como commits e branch.
Assim, preparei o vídeo a seguir de modo a explicar em detalhes cada um deles:
Assista
Acesse na plataforma o vídeo: Entendendo o versionamento
Até este ponto, você aprendeu os conceitos iniciais sobre a ferramenta git. A fim de você aprofundar seus
conhecimentos, recomendo os estudos da documentação dessa ferramenta, por meio da seguinte referência:
Aprofunde-se
Neste link, você encontra toda a documentação do git que irá auxiliá-lo em seus projetos
em pdf.
Título do artigo: Git
Link: https://git-scm.com/book/en/v2
12
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Como estudado por você, o git tem como função realizar o controle de versões de um software, no
entanto, para que isso ocorra, deve-se ter um repositório a ser gerenciado. É nesse ponto que entra o
GitHub e o GitLab, que consistem em plataformas para hospedagem de repositórios baseadas em git.
Mas o que git tem a ver a ver com GitHub ou GitLab? Segundo o Zup (2019), essencialmente, o GitHub e
o GitLab são plataformas de hospedagem de código-fonte que possibilitam os desenvolvedores contri-
buírem em projetos open source ou privados.
Tanto o GitHub quanto o GitLab oferecem recursos de hospedagem de código-fonte, revisão de código
inline, fork, clone de repositórios e integração com ferramenta de terceiros.
No entanto, essas ferramentas apresentam diferenças que ficam por conta de suas funcionalidades.
Enquanto o GitHub tem como foco a integração de ferramentas de DevOps, o GitLab oferece de forma
nativa ferramentas de integração e entregas contínuas, além de métricas que visam a qualidade de
software, teste de usabilidade e performance.
Aprofunde-se
O DevOps consiste na combinação de filosofias culturais, práticas e ferramentas que
incrementam a capacidade de uma empresa de distribuir aplicativos e serviços em alta
velocidade, desta forma, otimizando e aperfeiçoando produtos de uma forma mais ágil.
Título do artigo: O que é o DevOps?
Link: https://aws.amazon.com/pt/devops/what-is-devops/
13
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Figura 7 - Rotas.
O objeto Router contém um método específico chamado mapResources() cuja função permite configurar
algumas rotas padrões, as quais permitem o acesso REST em suas classes de controles (controllers). Por
exemplo, caso você queira permitir o acesso REST a um banco de dados de receitas, a implementação
seria algo como a seguir, adaptado de CakePHP (2020):
//Em app/config/routes.php...
Router::mapResources(‘recipes’);
Router::parseExtensions();
14
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Na primeira linha do código mostrado, é criada, de forma simples, uma série de rotas para acesso REST,
sendo essas rotas sensíveis ao método HTTP solicitado. A tabela a seguir, adaptada de CakePHP (2020),
descreve as rotas criadas:
De acordo com a documentação do CakePHP, a classe de rotas faz uso de diferentes indicadores para
detectar o método PHP utilizado. A seguir é mostrada a ordem de avaliação desses indicadores.
A classe de rotas do CakePHP utiliza diferentes indicadores para detectar o método HTTP utilizado.
Abaixo é demonstrada a ordem de avaliação desses indicadores:
2. O X_HTTP-Method-Override
3. O cabeçalho REQUEST_METHOD
A variável do POST_method tem sua devida importância ao fazer uso do navegador como um cliente
REST. Tendo as rotas prontas é fácil mapear as ações de um determinado controle. Uma classe de
controle básica é similar à mostrada a seguir, adaptada do CakePHP (2020):
// controllers/recipes_controller.php
function index() {
$recipes = $this->Recipe->find(‘all’);
$this->set(compact(‘recipes’));
function view($id) {
$recipe = $this->Recipe->findById($id);
15
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
$this->set(compact(‘recipe’));
function edit($id) {
$this->Recipe->id = $id;
if ($this->Recipe->save($this->data)) {
$message = ‘Saved’;
} else {
$message = ‘Error’;
$this->set(compact(“message”));
function delete($id) {
if($this->Recipe->delete($id)) {
$message = ‘Deleted’;
} else {
$message = ‘Error’;
$this->set(compact(“message”));
A fim de você compreender de um modo prático a constituição de rotas, separei para você o material
em vídeo a seguir:
Aprofunde-se
Título: Implementando rotas
Acesso em: 06/07/2020.
Disponível em: https://youtu.be/VuGOWDZWSTQ
16
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Para finalizar este tópico, o material em vídeo a seguir irá explanar o conceito de roteamento REST
personalizado.
Assista
Acesse na plataforma o vídeo: Roteamento REST personalizado
4 DEPURAÇÃO
Ao desenvolver um código computacional, é comum que ele não fique pronto em sua primeira versão,
sendo necessário ajustes a fim de corrigir os erros que serão encontrados.
Esta etapa de identificar o tipo de erro que está ocorrendo no código computacional e aplicar as corre-
ções necessárias de modo a se obter os resultados esperados recebe o nome de debug.
Certamente você já teve a experiência de realizar a depuração de seus programas, mesmo sem conhecer
os conceitos deste tema e a importância dele para o ambiente de desenvolvimento de software.
A fim de realizar uma pequena apresentação a você sobre o tema debug, separei o conteúdo em vídeo
a seguir:
Aprofunde-se
Título: Debug (Depuração)
Acesso em: 28/06/2020.
Disponível em: https://youtu.be/Wnb02kzc0Cw
Ao longo deste texto, foi feita uma abordagem utilizando a linguagem Python, mas os conceitos aqui
apresentados podem ser naturalmente estendidos para qualquer outra linguagem.
17
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Em geral, os erros de sintaxe são simples de serem corrigidos, desde que você conheça o problema, o
que pode não ser tão simples caso você não tenha tanta experiência com a implementação de códigos
computacionais, pois as mensagens mais comuns dos compiladores são: SyntaxError: invalid syntax e
SyntaxError: invalid, o que não ajuda muito.
18
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Reflita
Uma vez que as informações fornecidas pelo compilador não nos dizem muito sobre o
erro de sintaxe, uma questão natural seria se há uma estratégia a ser adotada a fim de
evitar que os erros de sintaxe ocorram. A resposta é dada por Miller et al. (2011), que
elenca os seguintes pontos a serem verificados:
• Se não está utilizando uma palavra reservada do Python como nome de variável;
• Se as aspas ou apóstrofos de qualquer string no código estão emparelhados;
• Se há dois pontos (:) no final de cabeçalho de cada comando (compound
statement), incluindo aqui os laços de repetição (for, while) assim como as
estruturas de seleção if e if else;
• Se é consistente o número de parênteses, chaves ou colchetes abertos e fechados;
• Verificar se há apenas um “=” ao invés de “==” em uma condição;
• Se a tabulação é consistente.
As dicas apresentadas por Miller et al. (2011) são de grande utilidade para a correção dos erros de
sintaxe, porém a depuração de um código computacional envolve outros tipos de erros que serão expla-
nados a seguir.
Ao reportar um erro de execução, os compiladores indicam em que ponto do programa o erro ocorreu
e quais eram as funções que estavam em execução naquele momento.
19
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Segundo Miller et al. (2011), um erro de execução é a recursão infinita que causa o erro maximum recur-
sion depth exceeded, como observa o referido autor. Apesar do erro ter se manifestado em um ponto
específico durante a execução do programa, o erro de lógica que o ocasiona pode estar em um trecho
de código distante desse ponto.
De modo a evitar que esse tipo de erro ocorra, uma das técnicas que você pode adotar é a depuração
do fluxo de execução (flow of execution). Assim, você deve verificar se o que você espera que ocorra
está acontecendo de fato em cada um dos trechos do código. Como exemplo, você pode incluir alguns
comandos do tipo print no interior de alguma função a fim de verificar se ela está sendo executada
corretamente.
Os erros de execução requerem para sua correção um profundo conhecimento do fluxo de execução do
programa e da lógica utilizada em sua construção. Sendo assim, esse tipo de erro requer pleno conheci-
mento do que está sendo desenvolvido.
20
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Como exemplo, considere que você deseja avaliar o resultado da expressão matemática a / (b * c), mas
durante o desenvolvimento do código computacional você dá a essa expressão matemática a seguinte
implementação: a / b * c. Certamente não irá obter o resultado esperado, pois devido a procedência dos
operadores matemáticos, a expressão é executada da seguinte forma: (a / b) * c.
Aprofunde-se
Título do livro: Problem solving with
algorithms and data structures using
Python
Autores: Bradley N. Miller e David L.
Ranum
Local: Portland, EUA.
Editora: Franklin, Beedle & Associates.
Data de Publicação: 2011.
ISBN: 1590282574.
Agora que você está munido do conhecimento teórico sobre os erros envolvidos durante o desenvolvi-
mento de um programa, separei o seguinte material em vídeo mostrando a depuração de um programa:
Assista
Acesse na plataforma o vídeo: Depurar um programa
21
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
Por fim, o infográfico a seguir irá ajudar você indicando alguns pontos a serem observados ao se realizar
a depuração de um código.
22
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
CONSIDERAÇÕES FINAIS
Nesta unidade, você aprendeu importantes conceitos sobre temas como frameworks, REST, rotas,
versionamento de códigos e depuração de programas. Todo esse conhecimento lhe permitirá construir
aplicações web cada vez mais sofisticadas e adequadas às demandas de mercado.
23
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
GLOSSÁRIO
Depuração: consiste no processo de buscar, encontrar e reduzir defeitos de implementações em códigos
computacionais ou até mesmo em hardware.
Framework: no contexto de desenvolvimento de software, consiste em uma abstração que reúne dife-
rentes tipos de códigos que são comuns entre diferentes projetos de software.
Semântica: consiste na área da Ciência da Computação que tem como objetivo especificar o significado
(ou comportamento) de programas e partes de hardware.
24
Arquitetura de aplicações web | Unidade 2 - Construção de serviços web
REFERÊNCIAS
ALVES, P. W. Desenvolvimento e Design de Sites. Disponível em: https://integrada.minhabiblioteca.com.
br/#/books/9788536519012/ Acesso em: 09 jul. 2020.
MILLER, Bradley N. et al. Problem solving with algorithms and data structures using Python. 2. ed.
EUA: Franklin, Beedle & Associates, 2011. ISBN 1590282574.
SOUSA, Filipe Perdigão de. Criação de framework REST/HATEOAS open source para desenvolvi-
mento de apis em node.js, 2015. 125 p. Dissertação (Mestrado Integrado em Engenharia Informática
e Computação) - Faculdade de engenharia do Porto, Porto, Portugal. Disponível em: https://referenciabi-
bliografica.net/a/pt-br/ref/abnt/?example=dissertation-1 Acesso em: 10 jul. 2020.
ZUP. Git, Github e Gitlab: o que são e principais diferenças, 2019. Disponível em: https://www.zup.com.
br/blog/git-github-e-gitlab Acesso em: 1 jul. 2020.
25