Ir para o conteúdo

Reutilização no Back-end

A reutilização de software baseia-se no uso de conceitos, produtos ou soluções previamente elaboradas ou adquiridas para a criação de um novo software, com o objetivo de melhorar a qualidade, produtividade e reduzir tempo e custos de projeto.

Reusar um produto significa poder reutilizar partes (ou o todo) de um sistema desenvolvido anteriormente, como: especificações, módulos de um projeto, arquitetura e código fonte.

Frameworks

Django

Django é um framework Python de alto nível que encoraja o desenvolvimento rápido e um design limpo e pragmático. Construído por desenvolvedores experientes, ele cuida de grande parte do trabalho de desenvolvimento da Web, para que você possa se concentrar em escrever seu aplicativo sem precisar reinventar a roda. É gratuito e de código aberto. Principais características do framework:

  • Projetado para acelerar o desenvolvimento;
  • Alta escalabilidade;
  • Oferece alta segurança;
  • Muito versátil.

Hot-Spots

  • Classe base para a definição das Models;
  • Classe base para a definição das Migrations;
  • Estrutura de organização/pastas do projeto.

Frozen-Spots

Bibliotecas

Google Maps Services Python

Esta biblioteca traz os serviços da web da plataforma do Google Maps para aplicações Python.

Aplicação no Projeto

O código a seguir aplica o padrão de projeto Proxy e utiliza um método fornecido pela biblioteca para obter a distância entre um estabelecimento e um usuário da aplicação.

import re
import googlemaps
from abc import ABCMeta, abstractmethod

class GoogleMapsInterface():
    __metaclass__ = ABCMeta

    @abc.abstractmethod
    def getDistance():
        raise NotImplementedError

class ProxyGoogleMaps():
    def __init__(self):
        self.googleMapsServices = googlemaps.Client(key='MY_KEY')

    def checkGeolocation(coords) -> bool:
        patternLat = 'regex_lat'
        patternLng = 'regex_lng'
        return re.search(patternLat, coords.lat) and re.search(patternLng, coords.lng)

    def getDistance(self, source, destination) -> float:
        if checkGeolocation(source) and checkGeolocation(destination):
            return self.googleMapsServices.distance_matrix(origins=source, destinations=destination)

Serviços

REST

Representational State Transfer (REST), em português Transferência Representacional de Estado, é um estilo de arquitetura de software que define um conjunto de restrições a serem usadas para a criação de web services(serviços Web). Principais características do REST:

  • Ele usa o protocolo HTTP (verbos, accept, headers, códigos de estado HTTP, Content-Type) de forma explícita e representativa para se comunicar. URIs são usados para expor a estrutura do serviço. Utiliza uma notação comum para transferência de dados como XML(Extensible Markup Language) ou JSON(JavaScript Object Notation).
  • Não possui estado entre essas comunicações, ou seja, cada comunicação é independente e uniforme (padronizada) precisando passar toda informação necessária.
  • Ele deve facilitar o cache de conteúdo no cliente.
  • Deve ter clara definição do que faz parte do cliente e do servidor. O cliente não precisa saber como o servidor armazena dados, por exemplo. Assim cada implementação não depende da outra e se torna mais escalável.

Aplicação no Projeto

A notação escolhida para tranferência de dados foi a JSON, pois essa notação é bastante simplificada e vem sendo amplamente utilizada em aplicações Web.

A tabela a seguir exemplifica os endpoints utilizados para a API REST de estabelecimentos da aplicação.

Endpoint Verbo Http Descrição
baseUri/establishments GET Lista ou filtra os estabelecimentos cadastrados
baseUri/establishments POST Cria um novo estabelecimento
baseUri/establishments PUT Atualiza um estabelecimento cadastrado
baseUri/establishments/{establishmentId} GET Recupera um estabelecimento a partir do Id
baseUri/establishments/{establishmentId} DELETE Deleta um estabelecimento a partir do Id

Referências

Versionamento

Data Nome Detalhes Versão
22/04/2021 João Baraky, Nícalo Ribeiro e Gustavo Nogueira Criação do documento de reutilização do back-end 0.1
22/04/2021 João Baraky, Nícalo Ribeiro e Gustavo Nogueira Adição da notação de transferência de dados escolhida 0.2
03/05/2021 Wagner Martins Correção de erros ortográficos 0.3