Responsáveis por abstrair serviços ou bibliotecas de terceiros.
Responsáveis por servir requisições HTTP ou outros protocolos desejados. Trabalha em conjunto com 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.
Responsáveis por definir schemas e regras relacionados ao banco de dados.
Responsáveis por separar métodos utéis que não fazem parte de um Service ou que é usado em mais de um Service.
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.
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.
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.
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.
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.
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.
Eu fiz uma (Proof of Concept) onde você pode ver a arquitetura e conceitos juntos no repositório abaixo.
https://github.com/chrisenytc/castiel