Tecnologia de Base

Web APIs REST

Escrito por: Frederico Gomes, Arquiteto de Software da Tirrell

Interfaces de programação de aplicação ou APIs (do inglês “Application programming Interface”) podem ser entendidas como um conjunto de regras, funções ou protocolos para comunicação entre componentes de um sistema de computação. APIs tem como objetivo principal facilitar os processos de desenvolvimento e integrações de sistemas. Ao abstrair detalhes de implementação de funcionalidades que, para o desenvolvedor, não são muito importantes, este fica livre para focar no problema a ser resolvido.

O processo de design de APIs pode ser considerado semelhante ao processo de design de uma boa interface gráfica de usuário (GUI). As características dos usuários e suas necessidades devem ser bem entendidas, assim como estas impactam a forma esperada de funcionamento da API. Seguindo-se uma metodologia de design baseada em casos de uso garante-se que a API reflita tarefas que o usuário quer executar e não os detalhes de implementação da API (Clarke, 2004).

Web APIs ganharam notoriedade a partir de 2000, quando diversas grandes empresas de internet começaram a disponibilizar suas Web APIs para parceiros e posteriormente todos os desenvolvedores interessados em construir aplicações utilizando seus serviços. Salesforce, Amazon, Ebay, Flickr foram algumas das pioneiras. Porém, a utilização de Web APIs construídas sobre protocolos SOAP e CORBA era bastante complexa e trabalhosa. A proposição da arquitetura de transferência representacional de estado, REST (do inglês “Representational State Transfer”) feita por Fielding em sua dissertação em 2000 alterou o universo das Web APIs.

Fielding (2000) desenvolveu seu trabalho partindo de princípios e tecnologias que já existiam, e foi evoluindo até a proposição do seu modelo de arquitetura híbrido. As principais restrições ou regras (“constraints”) que formam a base do modelo REST são:

  • Cliente-servidor: Um dos benefícios da separação de responsabilidades entre a interface (cliente) e o armazenamento de dados (servidor) é a portabilidade da interface, possibilitando a criação de diferentes “fronts”. Porém, Fielding (2000) aponta como principal consequência positiva dessa regra, considerando-se o mundo Web, é a possibilidade de evolução e desenvolvimento em separado entre os dois lados;
  • Stateless: Esta regra induz a um aumento ou facilidade das seguintes propriedades do sistema: visibilidade, confiabilidade e escalabilidade.
    • Visibilidade: um sistema de monitoria consegue obter toda a informação necessária em uma requisição;
    • Confiabilidade: o processo de recuperação de falhas parciais é extremamente facilitado;
    • Escalabilidade: como o servidor não precisa guardar estado, recursos são liberados mais rapidamente, além disso, a implementação de vários servidores é facilitada pois não há necessidade de gerenciar o estado entre requisições;
  • Cache: possibilita a eliminação parcial ou total de algumas interações entre o cliente e o servidor.
  • Interface Uniforme: ao forçar a uniformidade das interfaces, ganha-se visibilidade de interações e as implementações passam a ser desacopladas. A interface REST se baseia fortemente no protocolo HTTP, sendo assim otimizada para uso na Web.

A utilização de Web APIs está muito difundida hoje em dia. Diversas organizações têm trabalhado para expor recursos e funcionalidades internas e de sistemas legados para desenvolvedores externos, buscando aumentar os serviços disponibilizados para seus clientes. Um exemplo disso é o Open Banking.

Na Tirrell optamos por utilizar APIs REST na arquitetura de algumas de nossas soluções. Em um projeto específico, essa decisão foi tomada devido a necessidade de criação de aplicações com tecnologias e funcionalidades diferentes no lado do cliente. Necessitávamos, porém, manter as regras de negócio em um único ponto dentro da arquitetura, ao invés de espalhar e replicar esta complexidade em diversos clientes. Implementamos uma API REST em Java, utilizando Spring Boot. Esse desacoplamento entre o frontend e o backend abriu a possibilidade de criarmos aplicações mais ricas no frontend, utilizando diversas tecnologias optimizadas para usabilidade, libertando a equipe de UX de qualquer restrição vinda do backend.

Referências
Clarke, S., (2004). Measuring API Usability. [Online] Disponível em: http://www.drdobbs.com/windows/measuring-api-usability/184405654?pgno=1. Acesso em 13/12/2017.

Fielding, R. T., (2000). Architectural Styles and the Design of Network-based Software Architectures. [Online] Disponível em: http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm. Acessado em 13/12/2017.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *