• Nenhum resultado encontrado

Desenvolvendo Aplicações RESTFul utilizando Node.js

N/A
N/A
Protected

Academic year: 2021

Share "Desenvolvendo Aplicações RESTFul utilizando Node.js"

Copied!
17
0
0

Texto

(1)

Capítulo 

15 

 

Desenvolvendo Aplicações RESTFul utilizando

 

 

 

 

Node.js 

Aislan Rafael Rodrigues de Sousa e Washington Henrique Carvalho

 

 

 

 

   

 

 

 

Almeida 

Abstract 

The development of web applications and services has grown due in part to the                            popularization of new and more productive technologies and the popularization of                      them. This chapter presents basic web fundamentals through the HTTP communication                      protocol, which is a widely used and widespread technology. REST architectural style                        that makes use of such technologies to their full potential. Also presented is the Node.js                              tool that has a low learning curve and allows developing solutions to provide services                            with high scalability along with the application example that uses the REST                        architectural style. 

Resumo 

O desenvolvimento de aplicações e serviços web tem crescido devido, em parte, a                          popularização de novas tecnologias mais produtivas e a popularização das mesmas. No                        presente capítulo é apresentado fundamentos básicos da web através do protocolo de                        comunicação HTTP, que é uma tecnologia bastante utilizada e difundida. O estilo                        arquitetural REST que faz uso de tais tecnologias em todo seu potencial. Também será                            apresentado a ferramenta Node.js que possui uma baixa curva de aprendizado e                        permite desenvolver soluções para prover serviços com alta escalabilidade junto com o                        exemplo de aplicação que utiliza o estilo arquitetural REST. 

15.1. Introdução 

Com a massificação tecnológica das últimas décadas em 2016, 51% dos lares brasileiros        têm acesso à internet [CGI.BR 2016]⁠. A população brasileira possui cada vez mais        acesso a internet e utiliza diversos diversos dispositivos para fazer o acesso a mesma,        dos quais podemos citar       ​smartphones​, ​tablets​, ​notebooks entre outros. Cresce também a        demanda por aplicações dos mais diversos tipos incluindo       ​web services para que outras         

(2)

aplicações possam consumir esses dados. 

O sucesso da WEB acontece, em grande parte, por conta de que sua arquitetura        de ​software foi projetada para atender as necessidades de hipermídia distribuída em        larga escala [Fielding, 2000]. O HTTP (​Hypertext Transfer Protocol​) é o principal                  protocolo de comunicação para as aplicações web. Outro fator que contribuiu para o        crescimento da web foi a popularização do REST (       ​Representational State Transfer​) que        consiste em um conjunto de princípios de arquitetura que, quando seguidas, permite a        criação de um projeto com interface bem definidas.  

Aplicações que que utilizam os princípios REST são chamadas de RESTFul. O        REST é frequentemente aplicado para disponibilizar serviços para outros aplicações        (​web services​) e o mesmo utiliza integralmente as mensagens HTTP para se comunicar        através do que já é definido no protocolo. 

Segundo a Stack OverFlow (2017) a linguagem de programação JavaScript é        uma das mais populares entre os desenvolvedores. Inicialmente seu uso era voltado        apenas para o uso em navegadores. O surgimento de novas ferramentas como o Node.js      1  e NPM contribuiu para que a linguagem fosse amplamente utilizada para finalidades  2        além do que ela foi inicialmente idealizada.  

Desde 2010 até os dias de hoje, o Node.js cada vez mais provou ser uma        plataforma excelente na solução de diversos problemas, principalmente para construção        de APIs RESTful. Sua arquitetura         ​Single Thread que realiza operações de entrada e        saída não bloqueantes rodando em cima da linguagem de programação JavaScript. 

15.2 Referencial Teórico  

Para o entendimento do estudo de caso exposto neste é necessária a apresentação de        alguns conceitos. Será apresentado o protocolo HTTP, o estilo arquitetural REST, a        linguagem de programação JavaScript e também a ferramenta Node.js. 

15.2.1 Protocolo HTTP 

Ao acessar a internet um determinado usuário utiliza um navegador como por exemplo        o google chrome ou firefox . O usuário informa um endereço e o navegador faz uma    3    4        requisição o qual é respondido por um servidor. Essa forma de trabalhar onde um        cliente faz uma requisição e o servidor responde é chamada de arquitetura cliente        servidor. Para que essa comunicação ocorra deve haver regras de comunicação, ou seja,        um protocolo que estabelece a forma com que o cliente e servidor devem se comunicar.   O principal protocolo de internet é o HTTP o qual será nosso objeto de estudo.        A figura 15.1 apresenta a representação gráfica de como ocorre esse processo.      1 Disponível em https://nodejs.org  2 Disponível em https://www.npmjs.com/  3 Disponível em https://www.google.com/chrome  4 Disponível em https://www.mozilla.org/pt-BR/firefox/new/ 

(3)

  Figura 15.1 - Representação do HTTP 

 

O protocolo HTTP tem como objetivo distribuir objetos de hipermídia os quais        são referenciados por uma URL(        ​Uniform Resource Locator​) [EMER 2014]. Por URL          podemos entender por regras bem definidas para descrever recursos disponíveis na        WEB, ou seja, são os endereços utilizados na WEB um cliente para fazer acesso ao        servidor deve informar uma URL.  

Para organizar a comunicação entre servidor e cliente o HTTP são estabelecidos        cabeçalhos para a requisição do cliente e a resposta do servidor. No cabeçalho da        requisição podemos encontrar informações como por exemplo preferência de idiomas,        codificação e formato de conteúdo na resposta [EMER 2014].  

Um usuário ao utilizar um navegador informando um determinado endereço,        como por exemplo http://www.eripi.com.br/2017, é automaticamente feita uma        requisição utilizando o método GET do protocolo HTTP. Um método do protocolo        HTTP serve para reportar qual é a intenção ou ação desejada a ser executada.  

Ainda sobre os métodos HTTP pode-se destacar dois conceitos importantes: (i)        idempotentes e (ii) seguro. Temos um método idempotente quando o mesmo é chamado        n vezes e traz sempre o mesmo resultado. Já o método seguro se trata quando o mesmo        não altera um recurso disponível no servidor.   

A figura 15.2 demonstra a saída no terminal de uma requisição feita utilizando o        curl em um terminal. O curl que é uma ferramenta em modo texto utilizada para        transferir dados pela sintaxe de chamada [CURL 2017]. O comando utilizado no        terminal foi:   ​curl http://www.eripi.com.br/2017 -v​. Ainda observando a figura 15.2 o          texto precedido de > representa as informações da requisição feito pelo cliente e o        precedido de < representa a resposta dada pelo servidor. Podemos observar que na        requisição é passada informações como o método, a versão do protocolo utilizado e o        endereço do servidor. 

(4)

 

Figura 15.2 - Exemplo de cabeçalho HTTP 

 

Temos os métodos propostos por Fielding (1999) para a especificação do HTTP        1.1:  

● GET   ​- Tem o objetivo obter um recurso que representado por uma identificação        única denominado URI (​Uniform Resource Identifier​). 

● HEAD - O método HEAD é idêntico ao GET exceto que o mesmo não retorna o        corpo da mensagem apenas o cabeçalho. 

● POST​ - Serve para criar novos recursos no servidor.   ● PUT ​- Altera um recurso no servidor.   

● DELETE ​- Tem objetivo de excluir um recurso do servidor. 

Os métodos HEAD e GET são métodos seguros pois os mesmos apenas        retornam informações sem alterar recurso. Os métodos PUT e DELETE são        idempotentes pois apesar de poder alterar algum recurso no servidor os mesmos sempre        trazem o mesmo resultado.  

O método POST não se encaixa em nenhum dos dois conceitos pois ele        usualmente é utilizado para criar novos recursos e trazendo resultados diferentes. Ao se        fazer uma requisição junto a resposta do servidor é retornado um código de status que        informa ao cliente o resultado da requisição.  

O código de status é denominado       ​status code e é composto por um número        inteiro por três dígitos e informa ao cliente o resultado da requisição [FIELDING 1999].        No exemplo da figura 15.2 o status retornado é o 301 movido permanentemente, ou        seja, significa que o recurso que deveria corresponder ao endereço inicial foi        redirecionado permanentemente para outro endereço. Os números de status code são        divididos em 5 (cinco) famílias: (i) 1XX - representam informações; (ii) 2XX -        representa que a operação foi realizada com sucesso; (iii) 3XX - redirecionamentos; (iv)        4XX - erro originado no cliente e (v) 5XX - erros originados no servidor.   

(5)

15.2.2 REST 

REST é um estilo arquitetural para sistemas de hipermídia distribuídos [FIELDING        2000]. Podemos também dizer que REST é uma abordagem para desenvolvimento        serviços web que busca simplicidade e baixo acoplamento [SALVADORI 2015]. Como        citado anteriormente o termo RESTFul é utilizado para designar aplicações que        implementam os princípios definidos no estilo arquitetural REST. Pode ser utilizado        qualquer protocolo para implementar o estilo arquitetural REST, mas no presente        trabalho o protocolo HTTP será adotado como padrão devido a sua popularidade na        Web.  

Para entender melhor o estilo arquitetural é importante destacar três conceitos        importantes: (i) recurso; (ii) operações e (iii) representações. Recurso é qualquer        informação a qual é disponibilizada para os clientes através de um identificador único        (URI). Também podemos conceituar recurso como sendo a fonte de representações e as        representações são um conjunto de dados que representam o estado do recurso        solicitado [MORO et. al 2011]. As URIs devem possuir um padrão de notação, serem        descritivos e possuir uma hierarquia previamente definida [RODRIGUES 2014]. Um        mesmo recurso pode ser identificado por um ou mais URIs, mas uma URI identifica        apenas um recurso.  

Cada recurso pode ter mais de uma representação, sendo que, cada recurso deve        ter pelo menos uma representação. O HTTP possui operações e o recomendado é        respeitar a semântica e utilizar adequadamente as mesmas sendo as principais GET,        POST, PUT e DELETE. Acontecem casos onde a equipe de desenvolvimento        negligência o uso das operações e acaba utilizando o operador GET para realizar as        mais diversas ações o que acaba não sendo uma boa prática. A representação de um        determinado recurso pode ser feito de diversas formas como por exemplo HTML, PDF,        JSON ou XML. A figura 15.3 faz uma representação gráfica envolvendo os conceitos        apresentados.   

 

   

Figura 15.3 - Componentes da arquitetura REST   

É importante observar que quando é realizada uma requisição a resposta deve        conter um status ou mensagem. Como estamos tomando por base o protocolo HTTP        deve ser retornado o       ​status code ​adequado. A figura 15.4 ilustra uma requisição que um          determinado dispositivo   ​mobile ​que faz utilizando a operação GET a qual solicita o        recurso presente no endereço http://www.eripi.com.br/2017/. Logo após a requisição       

(6)

acontece a resposta do servidor que contém o       ​status code 200 o qual indica que tudo        aconteceu como o esperado. Ainda na resposta é informado que a representação do        recurso retornada é um HTML. Os       ​status code pertencente ao protocolo HTTP, os        mesmos fornecem uma maneira adequada de categorizar e padronizar as respostas das        requisições e ao utilizar o estilo arquitetural REST devem ser obrigatoriamente        utilizados [SALVADORI 2014]. 

   

 

Figura 15.4 - Modelo de requisição resposta    

Ao desenvolver uma aplicação o foco central são os recursos. Depois de definir        os recursos basta utilizar as operações que também são chamados de verbos para        manipular esses recursos. Uma boa prática é fazer uso do HATEOAS (      ​Hypermedia as    the Engine of Application State        ​) que implica que as representações de recursos devem        conter, além dos dados, controles hipermídia com transições válidas.  

Na prática isso ocorre ao adicionar a resposta do servidor endereçamentos para        novas requisições a partir da resposta que acabou de ser entregue indicando ao cliente o        que pode ser feito a partir daquele determinado recurso.   

Fielding (2000) define restrições para o estilo arquitetural REST o qual serve        como princípios do mesmo. Estão listadas abaixo:  

● Arquitectura cliente servidor - visa a separação de responsabilidades como por          exemplo a interface do usuário com problemas de armazenamento. Essa        abordagem permite ter interfaces diferentes de usuário garantindo a        portabilidade em diferente plataformas; 

● Stateless - As requisições devem ser independentes, ou seja, as requisições        devem conter todas as informações necessárias para o servidor responder. Na        prática o protocolo de comunicação não mantém o estado das requisições não        havendo portanto como recuperar informações das requisições anteriores, ou        seja, o servidor não deve recorrer a informações armazenadas em sessão de        usuário; 

● Cache - Torna possível o cliente armazenar localmente resultados de        requisições. Possibilita a reutilização das informações e aumento da       

(7)

performance. 

● Interface Uniforme - É a restrição central da arquitetura REST. Se configura        através do estabelecimento de uma interface uniforme entre cliente e servidor.        Define quatro princípios fundamentais: (i) identificação de recursos, (ii)        manipulação de recursos por meio de representações, (iii) mensagens auto        descritivas e (iv) recursos hipermídia.   

● Sistema em camadas - Permite que a arquitetura seja composta por camadas          hierárquicas condicionando os componentes de tal forma com que os mesmos a        não terem acesso a outras camadas que não seja a adjacente.  

● Código sob demanda - Permite mover um código no servidor para ser          executado no cliente.  

15.2.3 JavaScript 

O JavaScript surgiu em 1995 para rodar no navegador Netscape e posteriormente foi        adaptado para a maioria dos navegadores Web [HAVERBEKE 2014]. Idealizado        inicialmente para rodar nos navegadores atualizando o conteúdo dinamicamente. Esse        contexto contribuiu para que evoluísse de uma forma diferente das outras linguagens        focado em performance, criação de interfaces e dar uma melhor experiência para o        usuário [NETO 2017]. 

Conforme aconteceu a evolução dos navegadores o JavaScript acompanhou essa        evolução. Com o surgimento do conceito de nuvem as aplicações necessariamente        precisam ser escaláveis e com esse novo contexto foi necessário tirar maior proveito das        máquinas e utilizar o mínimo de recurso possível. Houveram também outras propostas        como divisão de carga e micro-serviços.  

É necessário conhecer a especificação da linguagem de script que o JavaScript        implementa o ECMAscript. A especificação é mantida pelo ECMA Technical        Committee 39 (TC39) o qual é formado por especialistas de grandes empresas [Pinho        2017]. Através da especificação é possível acompanhar quais funcionalidades estão        disponíveis nas aplicações que implementam a especificação.   

15.2.3 Node.js 

O Node.js pode ser definido como um ambiente      ​runtime para a linguagem de          programação JavaScript que roda em cima de uma       ​engine conhecida como Google V8        5  [NETO 2017]. O V8 é uma engine criado pela empresa Google para ser utilizada no        navegador Chrome.  

O JavaScript é uma linguagem interpretada, mas o V8 interpreta e compila para        linguagem de máquina otimizando, com a utilização de heurísticas. A arquitetura do        Node.js é não-bloqueante o que faz ela apresentar uma boa performance com o        consumo de memória utilizando de forma eficiente o poder de processamento dos        servidores [PEREIRA 2013]. 

Pereira (2017) destaca algumas características do Node.js: 

● Single Thread - Cada instância terá instância de apenas um processo. É utilizado       

(8)

programação assíncrona e recursos compartilhados para tirar maior proveito da        thread​ utilizada;  

● Operações de entrada e saída assíncrono e não bloqueante - Facilita execução        paralela e o aproveitamento de recursos. 

● Event-loop​ - É orientado a eventos. 

15.3 Estudo de Caso 

As ​Web Services REST também conhecidas como WEB API são bastante utilizadas na        implementação  de sistemas distribuídos [SALVADORI 2015]. Quando uma        determinada aplicação implementa os princípios REST, como já foi dito, é denominada        RESTFul. O estudo de caso proposto se trata de uma WEB API para prover recursos        voltados para controle financeiro pessoal. O foco da aplicação será o gerenciamento das        despesas pessoais e será uma plataforma que pode ser utilizada por outros aplicativos        fazer gerenciamento dos gastos pessoais. 

A aplicação permite: (i) cadastrar uma nova despesa; (ii) confirmar o pagamento        da despesa; (iii) cancelar uma determinada despesa caso a mesma não seja mais        necessária; (iv) retornar todas as despesas cadastradas e (v) retornar uma despesa em        específico. Para a representação dos recursos foi escolhido o JSON (       ​JavaScript Objetct    Notation​). Podemos observar na figura 15.5 a representação de uma despesa utilizando        JSON. 

 

 

Figura 1.5 - Representação de uma despesa utilizando JSON 

 

A despesa possui uma descrição que indica a natureza da despesa, mês        indicando o mẽs em que a despesa foi realizada, o ano indicando o ano que a despesa        foi realizada, o valor a ser pago por conta da despesa e o status que possui três possíveis        valores CRIADO, CONFIRMADO ou CANCELADO. O status CRIADO serve para        indicar que a despesa foi criada, o CONFIRMADO serve para indicar que a despesa foi        paga e o CANCELADO indica que por algum motivo a despesa deve ser        desconsiderada.   

15.3.1 Estrutura do Projeto 

A linguagem de programação escolhida é o JavaScript e a ferramenta o Node.js.        Também é utilizado o NPM (      ​Node Pakage Manager​) o qual é utilizado para criar          projetos, automatizar tarefas e gerenciar dependências [NETO 2017]. Foram utilizados       

(9)

as seguinte bibliotecas que estão presentes no repositório do NPM: (i) express; (ii)        express-load; (iii) express-validator; (iv) body-parser e o (v) mysql.  

O express estende as capacidades do Node.js adicionando       ​middlewares ​e outras    capacidades [ALMEIDA 2014]. O express-load tem a função de auxiliar no processo de        carregar os módulos para que os mesmos sejam feitos automaticamente. O        express-validator tem a função de auxiliar na validação de dados de entrada.  

Já o body-parser serve para transportar os dados como JSON pois as requisições        com as operações POST ou PUT ao serem executadas transporta os dados como texto.        Por último a biblioteca mysql serve para facilitar a comunicação com o sistema        gerenciador de banco de dados MySQL o qual será utilizado para fazer a persistência      6        dos dados.  

A figura 15.5 representa a estrutura de pastas utilizada na WEB API. O nome do        projeto é   ​node-simple-rest-wallet​. Dentro do projeto temos as pastas ​config​, ​controllers​,        persistencia e   ​routes​. A pasta ​config é destinada para arquivos de configuração. Foi        utilizado o arquivo custon-express.js para armazenar todas as configurações utilizadas        no express.  

Temos na pasta routes todas as rotas uma para o recurso e operação. Na pasta        controlles  temos a implementação das rotas, ou seja, o código onde de fato é        implementação a lógica por trás de cada operação. Na pasta principal temos os dois        arquivos package.json e app.js. O package.json tem o papel de guardar as configurações        do NPM referente ao projeto, guardar os       ​scripts para executar a aplicação e os testes        [NETO 2017]. O arquivo app.js é o ponto de partida onde será informado o endereço        do servidor e a porta o qual irá funcionar.   

 

 

Figura 15.5 Estrutura de pastas e arquivos 

 

É necessário conhecer os detalhes dos recursos e como realizar requisições para        que outras aplicações possam interagir com a WEB API proposta [SALVADORI 2014].        É apresentado na tabela 15.1 os recursos disponíveis e as operações permitidas para       

(10)

cada um. O recurso       ​/despesas/despesa possibilita executar duas operações sendo elas        POST e o GET. Temos também o recurso       ​/despesas/despesa/{id} que permite utilizar a          variável id e possibilita as operações GET, PUT e DELETE. A variável id identifica        unicamente uma determinada despesa o qual deve ser substituído pelo valor desejado.     

Tabela 15.1 Recursos e Operações 

Recurso  Método  Descrição 

/despesas/despesa  POST  Cadastrar nova despesa 

GET  Obter a lista contendo todas as despesas  /despesas/despesa/{id}  GET  Obter despesa identificada pelo id 

PUT  Confirmar pagamento de despesa  DELETE  Cancelar despesa  

 

Na WEB API esse mapeamento é feito dentro da pasta       ​routes​. A aplicação      representa um serviço web, ou seja, funcionalidades definidas através de rotas. A rota        pode ser entendida como um serviço a ser implementado e para isso necessita de um        endereço a partir do qual esse serviço será acessado, uma função de retorno que deverá        conter o código a ser executado e a operação (método HTTP) que define a forma de        acesso a rota.  

Na figura 15.6 temos o código fonte do mapeamento das rotas. Pode-se observar        que é declarado antes das rotas uma constante que recebe um objeto despesa. O objeto        está na pasta     ​controllers onde o mesmo contém funções que implementam as ações para        cada rota. Essa separação permite visualizar no código fonte, de forma simplificada,        cada recurso com suas respectivas operações.  

 

 

Figura 15.6 - Representação do mapeamento de rotas 

  

A persistência ficará a cargo do sistema gerenciador de banco de dados MySQL.        Na figura 15.7 temos a representação do esquema da tabela despesa. Na pasta        persistência foi implementado o objeto DespesaDAO o qual possui funções que       

(11)

realizam a persistência e recuperação de dados no banco criado através do MySQL.       Figura 15.7 - Esquema da tabela despesas     15.3.1 Implementação das rotas 

A primeira rota tem como endereço /despesas/despesa e a operação POST. Na        requisição é passado um JSON com os dados da despesa. A WEB API ao receber a        requisição validar, persistir no banco e retornar os dados. Na resposta, entre outras        informações, é passado o       ​status code 201 que indica que o recurso foi criado com        sucesso, o tipo da representação (      ​application/json​) e o JSON contendo as informações        que foram persistidas.  

Ao ser criada a despesa o seu status passa a ser “CRIADO” indicando que a        despesa foi criada, mas ainda não foi paga. Ainda no JSON, seguindo o princípio        HATEOAS, é acrescentado informações (        ​links​) de quais os possíveis próximos passos        que podem ser tomados a partir do recurso que criado. A figura 15.8 faz a representação        de uma requisição a rota.  

 

 

(12)

 

A implementação da rota POST /despesas/despesa está na função postDespesa        que faz parte do objeto despesa dentro da pasta       ​controller​. A figura 15.9 demonstra o        código fonte onde podemos observar que é recebido os dados da requisição e logo        depois é alterado o ​status​ da despesa para CRIADO.  

Para controlar a conexão com o banco de dados é utilizado o objeto        connectionFactory e o mesmo é passado como parâmetro para o objeto DespesaDAO.        Ambos estão implementados na pasta persistência.  

Caso aconteça algum erro durante a persistência é retornado um       ​status code 500      indicando que houve um erro interno ao servidor. Se não houver nenhum problema é        indicado uma   ​location ​para informar o endereço do novo recurso criado e retorna um        JSON com as informações da despesa e os       ​links ​com possíveis rotas que podem ser        requisitadas a partir do recurso que acabou de ser criado. 

 

 

Figura 15.9 Código fonte da implementação da rota POST /despesas/despesa 

 

(13)

tudo ocorreu como o esperado e um       ​array de JSON com todas as despesas. A operação        GET é segura pois a mesma não altera os recursos no servidor. A figura 15.10 faz a        representação gráfica da rota GET /pessoas/pessoa.  

 

 

Figura 15.10 - Representação da rota GET /despesas/despesa 

A implementação da rota GET /despesas/despesas está na função getDespesas e        consiste apenas em consultar no banco de dados as despesas existentes e retornar às        mesmas em um     ​array​. Assim como na rota anterior caso exista algum problema na        conexão é retornado um       ​status code 500 indicando ao cliente que houve um erro interno        no processamento no servidor. A figura 15.11 demonstra a implementação da rota.   

 

Figura 15.11 - Código fonte Código fonte da rota GET /despesas/despesa 

 

A rota GET /despesas/despesa/{id} é análoga a despesa a rota GET        /despesas/despesa. A diferença está no retorno o qual consiste em um JSON com apenas        a despesa identificada através do parâmetro id. A figura 15.12 mostra a representação        gráfica da rota. A figura 15.12 faz a representação gráfica da rota.  

(14)

 

Figura 15.12 Representação da rota GET /despesas/despesa/{id} 

 

Em sua implementação pode ser observado que o parâmetro id é utilizado para        recuperar do banco de dados a despesa qual o mesmo identifica unicamente. Na        resposta é retornado o       ​status code padrão, ou seja, o 200. A figura 15.13 apresenta o        código fonte da rota GET /despesas/despesa/{id}. 

 

Figura 15.13 Código fonte da rota GET /despesas/despesa/{id} 

 

Através da rota PUT /despesas/despesa/{id} é possível confirmar o pagamento        da despesa identificada através do parâmetro id. A operação PUT é idempotente pois a        mesma sempre traz o mesmo resultado independente da quantidade de vezes que é        executada. Caso tudo ocorra como esperado também irá retornar o       ​status code 200. A        figura 15.14 demonstra a representação gráfica da rota PUT /despesas/despesa/{id}.    

(15)

  Figura 15.14 Representação da rota PUT /despesas/despesa/{id} 

 

A função que implementa a rota PUT /despesas/despesa/{id} é o putDespesa.        Após pesquisa a despesa a qual o parâmetro id identifica é feito uma atualização        indicando o   ​status mudou para CONFIRMADO. Na figura 15.15 é possível verificar a        implementação da rota. 

 

Figura 15.15 Código fonte da rota PUT /despesas/despesa/{id} 

 

Por fim, temos a rota DELETE /despesas/despesa/{id} onde a mesma tem o        objetivo de cancelar uma determinada despesa mudando o seu status para        CANCELADO através do id passado como parâmetro. Caso ocorra tudo com sucesso é        retornado o status code 204. A figura 15.16 trás a representação gráfica da rota.    

(16)

 

Figura 15.16 Representação da rota DELETE /despesas/despesa/{id} 

 

A função que implementa a rota DELETE /despesas/despesa/{id} é a        deleteDespesa. A operação DELELTE também é idempotente. Caso ocorra tudo como        esperado a resposta do servidor retorna o ​status code​ 204.      Figura 15.17 Código fonte da rota DELETE /despesas/despesa/{id}    15.4 Considerações Finais 

Neste capítulo foram apresentados conceitos gerais sobre a arquitetura de aplicações        web sobre o protocolo HTTP baseada em serviços REST implementados com a        tecnologia Node.js. A popularização da Internet no Brasil ampliou a gama de serviços        oferecidos para a população, abrindo um novo leque de possibilidades para a expansão        das implementações baseadas em arquiteturas melhores adaptadas a essa nova realidade.  Neste trabalho foram apresentados os conceitos básicos para implementação de        web services     e um roteiro de implementação detalhado com objetivo de demonstrar as        melhores práticas para desenvolvimento de soluções REST com Node.js apoiadas nas        técnicas de engenharia de software, buscando alta coesão, baixo acoplamento, melhor        manutenibilidade, escalabilidade e agilidade no desenvolvimento. 

(17)

Referências  

ALMEIDA, F. MEAN Full Stack JavaScript para aplicações web com       

MongoDB, Express, Angular e Node. Casa do Código, 2014.   CGI.BR. TIC Domicílios 2015. São Paulo: cgi.br, 2016. 

CURL. Disponível em <https://curl.haxx.se/>. Acesso em 05 de Maio de 2017. 

EMER, Jean Carlo. O grande desencontro do HTTP com o HTML: 6 de janeiro de       

2014.  Disponível  em: 

<http://tableless.com.br/o-grande-desencontro-http-com-o-html/>. Acesso em 10 de          Maio 2017. 

FIELDING, Roy et al. Hypertext transfer protocol--HTTP/1.1. 1999. 

FIELDING, R. T. REST: Architectural Styles and the Design of Network-based        Software Architectures. Tese (Doctoral dissertation)—University of California,       

Irvine,  2000.  Disponível  em: 

<http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm>  

HAVERBEKE, Marijn. Eloquent javascript: A modern introduction to programming.        No Starch Press, 2014. 

MORO, T. D.; DORNELES, C. F.; REBONATTO, M. T. Web services WS- * versus Web Services REST. REIC - Revista de Iniciação Científica, v. 11, n. 1, p. 36–51, 2011.

NETO, W. Construindo APIs testáveis com Node.js. [s.l.] LeanPub, 2017.

PEREIRA, C. R. Construindo APIs Rest com Node.js. 1. ed. São Paulo: Casa do        Código, 2016.  

PEREIRA, C. R. Node.js: Aplicações web real-time com Node.js. São Paulo: Casa do        Código, 2013.  

PINHO, D. M. DE. ECMAScript 6 - Entre de Cabeça no futuro do JavaScript. Casa do        código, 2017. 

RODRIGUES, L. Desenvolvimento de Aplicações Móveis com Serviços RESTful e        HTML5. p. 171–179, 2014. 

SALVADORI, I. L. Desenvolvimento de Web APIs RESTful semânticas baseadas em        JSON. Igarss 2014, n. 1, p. 1–5, 2015. 

STACK  OVERFLOW.  Developer  Survey  Results  2017.  Disponível  em  <https://insights.stackoverflow.com/survey/2017>. Acesso em 01 de Maio de 2017. 

Referências

Documentos relacionados

STD SCÂNIA BUCHA ENGRENAGEM INTERM.. STD

Medicamentos biológicos, fornecidos nos planos de saúde, devem ser trocados por biossimilares apenas com consentimento médico... Medicamentos biológicos, fornecidos nos planos de

Conjunto de capas para pedais, spoiler dianteiro, embaladeiras laterais, spoiler traseiro, spoiler para tejadilho, friso cromado para a tampa da

Quando o preço registrado tornar-se superior ao preço praticado no mercado por motivo superveniente, a Administração convocará o(s) fornecedor(es) para negociar(em) a redução

Ainda segundo Gil (2002), como a revisão bibliográfica esclarece os pressupostos teóricos que dão fundamentação à pesquisa e às contribuições oferecidas por

Quais são os requisitos de uma plataforma multilateral de software para possibilitar o aumento da quantidade de resíduos de equipamentos eletroeletrônicos (REEE) destinados

VUOLO, J.H. Fundamentos da Teoria de Erros, Edgard Blucher Ltda, São Paulo, 1992 YIN, R.K. Estudo de caso: planejamento e métodos, Bookman, Porto Alegre, 2005.. Quando a

O desafio a ser tratado no presente trabalho consiste justamente em oferecer resposta a como o mercado de loterias pode servir para formação de poupança tanto da