C’est là que je suis le plus catégorique. Ne répartissez pas les contrôles d’autorisation entre vos résolveurs, les morceaux de code qui récupèrent chaque champ. Le document officiel des meilleures pratiques d’autorisation du projet GraphQL vous conseille de placer la règle dans la couche de logique métier, puis de laisser le résolveur demander simplement la réponse. Mais si la règle réside dans des résolveurs, vous vous retrouverez un jour avec une deuxième route vers les mêmes données, qu’il s’agisse d’une API REST, d’un processus par lots, d’un autre service, et vous vous retrouverez avec deux versions légèrement différentes de la règle, et deux utilisateurs obtiendront des données différentes en fonction de la porte par laquelle ils sont entrés. Dans un système qui contrôle l’accès, il s’agit du pire bug qui puisse exister car il se comporte comme une fonctionnalité.
Cinq questions à se poser avant de l’adopter
Ils ne décideront pas des choses à votre place, mais ils vous montreront de quel côté de la barrière pointe le poids de la preuve.
- Combien de clients/écrans ont besoin de différentes formes pour les mêmes données ? Si la réponse est un ou deux, peut-être que quelques points de terminaison REST soigneusement conçus feront le travail à votre place.
- Dans quelle mesure les données sont-elles interconnectées ? Plus il est interdépendant, plus le gain de GraphQL est important. Des clients aux comptes en passant par les autorisations et les propriétaires, il existe une grande interdépendance.
- À qui appartiennent le schéma et la couche située au-dessus du schéma ? Lorsqu’il n’y a pas de propriétaire du contrat, une dérive se produira.
- Quelles sont vos règles d’autorisation ? Et comment sont-ils actuellement mis en œuvre ? S’ils sont répartis, GraphQL l’exposera. S’ils sont actuellement implémentés dans votre couche de logique métier, vous êtes en pleine forme.
- Avez-vous besoin de plus qu’un point de terminaison REST ? C’est la vérité que vous devez vous demander ici. « Probablement » est une bonne réponse.
La lecture des réponses est facile. S’il existe plusieurs clients ayant besoin de différentes tranches de données hautement interconnectées, vous avez la possibilité de vous approprier le schéma et vous disposez d’un mécanisme d’autorisation centralisé, utilisez cette réponse et commencez par utiliser les écrans les plus pénibles. Si votre réponse serait « un client, des données plates, pas de propriétaire de schéma », alors tenez bon. Vous venez de payer pour quelque chose dont vous n’avez pas besoin. Si vous avez des réponses mitigées, essayez GraphQL avec un seul écran à lecture lourde et commencez par des contrôles de profondeur et d’autorisation.
