API's escaláveis e manuteníveis com

Christopher EnyTC

@chrisenytc

Requisitos

  • Ser complexa e robusta o bastante para uma aplicação de grande porte, como um sistema financeiro.
  • Ser modular e eficiente para uma equipe sempre em movimento.
  • Ser expressiva e fácil de entender para novos membros da equipe.
  • Ser fácil e ágil de testar e rodar ambientes simulados.

Conceitos

  • Adapters
  • Endpoints
  • Services
  • Models
  • Helpers
  • Responders
  • Updaters
  • Schema
  • Policies
  • Typed Errors
  • Promises

Adapters

Responsáveis por abstrair serviços ou bibliotecas de terceiros.

Endpoints

Responsáveis por servir requisições HTTP ou outros protocolos desejados. Trabalha em conjunto com Services.

Services

Responsáveis por implementar a lógica de negócio da aplicação de forma idempotente. Podendo ser usado por várias formas de transmissão sem alterar a assinatura dos métodos e podendo ser usado em mais de um Endpoint.

Models

Responsáveis por definir schemas e regras relacionados ao banco de dados.

Helpers

Responsáveis por separar métodos utéis que não fazem parte de um Service ou que é usado em mais de um Service.

Responders

Responsáveis por definir o resultado da resposta da requisição, levando em conta o contexto atual do usuário em caso de vários níveis de acesso e propriedades privadas que apenas certos usuários podem acessar.

Updaters

Similar ao Responder. Sua função é atualizar determinadas propriedades de um recurso dependendo do contexto atual do usuário e dos níveis de acesso daquele recurso. Permitindo atualizar certas propriedades privadas com segurança.

Schema

Responsáveis por definir um conjunto de regras para validação de parâmetros pelo cliente que fez a requisição. Também responsável por fazer coerção de determinados tipos de dados na criação ou atualização de um recurso.

Policies

Responsáveis por definir um conjunto de regras de permissão para um recurso ou um conjunto de recursos. Pode atuar em vários tipos de protocolos.

Typed Errors

Responsáveis por definir um conjunto de tipos para todos os erros gerados pela aplicação, permitindo o tratamento de erros de uma forma segura e concisa. Uma das vantagens é que a aplicação só vai exibir para o usuário erros específicos e definidos pela aplicação ao em vez de erros genéricos gerados internamente.

Promises

Responsáveis por gerir todas as ações executadas na API. Tudo retorna uma Promise e todos os erros que acontecerem em todos os fluxos da aplicação, desde o bootstrap até a resposta da requisição são tratadas em apenas um lugar tornando o código mais limpo, confiável, legível e auto-explicativo.

Obrigado

Eu fiz uma (Proof of Concept) onde você pode ver a arquitetura e conceitos juntos no repositório abaixo.

https://github.com/chrisenytc/castiel

Criando excelentes APIS com Node.js

By Christopher Enytc

Criando excelentes APIS com Node.js

Criando API's escaláveis e manuteníveis para aplicações complexas com Node.js.

  • 900