É aqui que sou mais inflexível. Não espalhe verificações de permissão entre seus resolvedores, os trechos de código que buscam cada campo. O documento oficial de práticas recomendadas de autorização do projeto GraphQL aconselha você a colocar a regra na camada de lógica de negócios e, em seguida, deixar o resolvedor apenas solicitar a resposta. Mas se a regra estiver em resolvedores, um dia você se encontrará com uma segunda rota para os mesmos dados, seja uma API REST, um processo em lote, algum outro serviço – e você terminará com duas versões ligeiramente diferentes da regra, e dois usuários obterão dados diferentes com base na porta pela qual entraram. Em um sistema que controla o acesso, esse é o pior bug que pode existir porque se comporta como um recurso.
Cinco perguntas a fazer antes de adotá-lo
Eles não decidirão as coisas por você, mas mostrarão para que lado da cerca o peso das evidências aponta.
- Quantos clientes/telas precisam de formatos diferentes dos mesmos dados? Se a resposta for uma ou duas, talvez alguns endpoints REST cuidadosamente projetados façam o trabalho para você.
- Quão interconectados estão os dados? Quanto mais interdependente, maior será o ganho do GraphQL. Dos clientes às contas, às permissões aos proprietários, há uma grande interdependência.
- Quem é o dono do esquema e da camada acima do esquema? Quando não há dono do contrato, ocorrerá desvio.
- Quais são as suas regras de autorização? E como eles são implementados atualmente? Se eles estiverem espalhados, o GraphQL irá expor isso. Se eles estiverem atualmente implementados em sua camada de lógica de negócios, você estará em ótima forma.
- Você precisa de mais do que um endpoint REST? Essa é a verdade que você precisa se perguntar aqui. “Provavelmente” é uma boa resposta.
Ler as respostas é fácil. Se houver vários clientes com necessidades de diferentes fatias de dados altamente interconectadas, você terá a capacidade de se apropriar do esquema e terá um mecanismo de autorização centralizado, use esta resposta e comece usando as telas com maior dificuldade. Caso sua resposta tenha sido “um cliente, dados simples, sem proprietário de esquema”, então espere. Você acabou de pagar por algo que não precisa. Se você tiver respostas mistas, experimente o GraphQL com uma tela de muita leitura e comece com controles de profundidade e autorização.
