GraphQL et REST API¶
Copy of
sumaris-pod/.agents/rules/graphql-rest-api.md(rule written for AI coding agents, when creating or modifying GraphQL services, REST controllers, FilterVO, FetchOptions, or JSON serialization). Do not edit here: runnpm run site:sync-rulesto update it.
GraphQL¶
- Annotations : Toujours utiliser
@GraphQLApi,@GraphQLQuery,@GraphQLMutationet@GraphQLArgument. Expose les mêmes méthodes avec:- Lecture:
@GraphQLQuery(name=..., description=...)+@Transactional(readOnly = true). - Écriture:
@GraphQLMutation(name=..., description=...)+@Transactional. - Chaque paramètre:
@GraphQLArgument(name = "...").
- Lecture:
- Services : Le
GraphQLServicedoit déléguer ses appels auServicecorrespondant (ex:PersonService). - Filtrage : Utiliser systématiquement les classes
FilterVO(ex:PersonFilterVO) etFetchOptionspour les requêtes de liste. - Transactions : Utiliser
@Transactional(readOnly = true)pour les queries et@Transactionalpour les mutations.
REST¶
- Beans POJO : Utiliser des classes dédiées pour le JSON (avec Lombok
@Data,@Builder). - Nomenclature JSON : Utiliser
@JsonPropertypour assurer le snake_case dans le JSON si nécessaire (ex:home_page_url). - Authentification : Utiliser
AuthService.isLogin()etAuthService.hasUserProfile()pour sécuriser les endpoints. - Paths : Utiliser les constantes de
RestPathssi elles existent. -
Media Types : Spécifier explicitement
producesetconsumes(ex:MediaType.APPLICATION_JSON_VALUE). -
Sérialisation JSON
- Utilise des POJO dédiés (pas de Map) avec Lombok
@Data,@Builder,@NoArgsConstructor,@AllArgsConstructor. @JsonInclude(JsonInclude.Include.NON_NULL)et@JsonPropertysi le champ diffère de la convention Java.- Regroupe les modèles par domaine (ex: paquetage
feed).
- Utilise des POJO dédiés (pas de Map) avec Lombok
-
Authentification/Autorisations via
AuthServiceauthService.isLogin(),authService.hasUserProfile(UserProfileEnum),authService.getUserProfiles().- Filtre le contenu selon l'état d'authentification et les profils.
-
Endpoints
- Méthodes HTTP adaptées, paths clairs et constants centralisés (classe
RestPaths). - Déclare
produces/consumesexplicitement; documente l'endpoint.
- Méthodes HTTP adaptées, paths clairs et constants centralisés (classe
-
Données et références utilisateur
- Utilise
SystemRecipientEnum(pas de chaînes en dur) etCryptoUtils.minifyPubkey(). - Résout les personnes via
PersonServiceetPersons.getDisplayName(). - Internationalise tout message utilisateur (voir règle i18n).
- Utilise
Filtres et FetchOptions¶
- Un
FilterVOdoit implémenterIDataFilter. - Un
FetchOptionsdoit implémenterIFetchOptions. - Ces objets permettent de contrôler finement les données retournées et d'optimiser les performances.