Configuration Guide¶
Guide complet de configuration de SpringFlow pour personnaliser le comportement de votre API.
Configuration de Base¶
Configuration Minimale¶
SpringFlow fonctionne avec zéro configuration! Il suffit d'ajouter la dépendance:
Configuration Recommandée¶
Pour un contrôle plus fin, ajoutez ces paramètres dans application.yml:
springflow:
enabled: true
base-path: /api
pagination:
default-page-size: 20
max-page-size: 100
swagger:
enabled: true
title: My Application API
description: Auto-generated REST API
version: 1.0.0
Activation / Désactivation¶
Activer SpringFlow¶
Valeur par défaut: true
Désactiver Complètement¶
Utile pour les tests ou certains profils:
Avec cette configuration, aucune API ne sera générée.
Désactivation par Profil¶
Chemin de Base (Base Path)¶
Configuration du Chemin de Base¶
Valeur par défaut: /api
Résultat:
- @AutoApi(path = "/products") → /api/products
- @AutoApi(path = "/orders") → /api/orders
Exemples de Configuration¶
API Versionnée¶
Résultat: /api/v1/products, /api/v1/orders
Pas de Préfixe¶
Résultat: /products, /orders (directement à la racine)
Chemin Custom¶
Résultat: /rest/public/products
Scan de Packages¶
Scan Automatique (Recommandé)¶
Par défaut, SpringFlow scanne les packages de votre application automatiquement:
Packages Explicites¶
Pour cibler des packages spécifiques:
Use Cases: - Multi-modules avec entités dans plusieurs packages - Exclusion de certains packages - Performance (scan plus rapide)
Exemple Multi-Modules¶
springflow:
base-packages:
- com.example.core.domain
- com.example.catalog.entities
- com.example.orders.models
Pagination¶
Configuration Complète¶
springflow:
pagination:
default-page-size: 20 # Taille par défaut
max-page-size: 100 # Taille maximum autorisée
page-parameter: page # Nom du paramètre de page
size-parameter: size # Nom du paramètre de taille
sort-parameter: sort # Nom du paramètre de tri
one-indexed-parameters: false # Pagination commence à 0 ou 1
Paramètres Détaillés¶
default-page-size¶
Valeur par défaut: 20
Taille de page utilisée si l'utilisateur ne spécifie pas ?size=X.
Exemples:
- GET /api/products → 20 résultats
- GET /api/products?page=0 → 20 résultats
- GET /api/products?size=50 → 50 résultats
max-page-size¶
Valeur par défaut: 100
Taille maximum autorisée. Protège contre les requêtes trop gourmandes.
Comportement:
- ?size=50 → OK, retourne 50 résultats
- ?size=200 → Limité à 100 résultats
page-parameter, size-parameter, sort-parameter¶
Personnaliser les noms des paramètres de requête:
springflow:
pagination:
page-parameter: p # ?p=0
size-parameter: limit # ?limit=20
sort-parameter: order # ?order=name,asc
Requête avec configuration par défaut:
Requête avec configuration custom:
one-indexed-parameters¶
Valeur par défaut: false (commence à 0)
false: Première page =?page=0(standard Spring Data)true: Première page =?page=1(plus intuitif pour certains)
Exemples de Configuration¶
Configuration Haute Performance¶
Pour APIs internes avec gros volumes:
Configuration API Publique¶
Pour limiter la charge:
Compatible avec Systèmes Legacy¶
springflow:
pagination:
page-parameter: pageNumber
size-parameter: pageSize
sort-parameter: sortBy
one-indexed-parameters: true
Résultat: ?pageNumber=1&pageSize=25&sortBy=name,asc
Swagger / OpenAPI¶
Configuration Complète¶
springflow:
swagger:
enabled: true
title: My Application API
description: Complete REST API documentation
version: 1.0.0
contact-name: API Support Team
contact-email: api@example.com
contact-url: https://example.com/support
license-name: Apache 2.0
license-url: https://www.apache.org/licenses/LICENSE-2.0
Paramètres Détaillés¶
enabled¶
Valeur par défaut: true
Active/désactive la documentation Swagger UI.
Accès: http://localhost:8080/swagger-ui.html
Métadonnées de l'API¶
springflow:
swagger:
title: E-Commerce API
description: |
API REST complète pour la gestion de catalogue produits,
commandes et clients.
## Authentification
Utilise JWT Bearer tokens.
## Rate Limiting
1000 requêtes par heure.
version: 2.1.0
Ces informations apparaissent en haut de Swagger UI.
Informations de Contact¶
springflow:
swagger:
contact-name: Support Technique
contact-email: support@mycompany.com
contact-url: https://mycompany.com/api-support
Affiche un lien de contact dans Swagger UI.
Licence¶
Exemples de Configuration¶
Configuration Open Source¶
springflow:
swagger:
enabled: true
title: SpringFlow Demo API
description: Demonstration API showcasing SpringFlow capabilities
version: 0.1.0-SNAPSHOT
license-name: Apache License 2.0
license-url: https://www.apache.org/licenses/LICENSE-2.0
Configuration Entreprise¶
springflow:
swagger:
enabled: true
title: Internal CRM API
description: Customer Relationship Management API - Internal Use Only
version: 3.2.1
contact-name: Architecture Team
contact-email: architecture@company.com
contact-url: https://wiki.company.com/api-docs
license-name: Proprietary
license-url: https://company.com/license
Désactivation en Production¶
Raison: Cacher la documentation en production pour des raisons de sécurité.
Configuration par Environnement¶
Structure Recommandée¶
src/main/resources/
├── application.yml # Configuration commune
├── application-dev.yml # Développement
├── application-test.yml # Tests
└── application-prod.yml # Production
application.yml (Base)¶
spring:
application:
name: my-application
springflow:
enabled: true
base-path: /api
pagination:
page-parameter: page
size-parameter: size
sort-parameter: sort
application-dev.yml¶
springflow:
pagination:
default-page-size: 10 # Petites pages pour debug
max-page-size: 50
swagger:
enabled: true
title: My API (DEV)
description: Development environment
version: ${project.version}-SNAPSHOT
application-test.yml¶
application-prod.yml¶
springflow:
pagination:
default-page-size: 50
max-page-size: 500
swagger:
enabled: false # Caché en production
Activation¶
# Développement (par défaut)
./mvnw spring-boot:run
# Test
./mvnw spring-boot:run -Dspring.profiles.active=test
# Production
./mvnw spring-boot:run -Dspring.profiles.active=prod
Configuration Complète Exemple¶
Application Réelle¶
# application.yml
spring:
application:
name: ecommerce-api
datasource:
url: jdbc:postgresql://localhost:5432/ecommerce
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
jpa:
hibernate:
ddl-auto: validate
show-sql: false
springflow:
enabled: true
base-path: /api/v1
base-packages:
- com.example.ecommerce.domain.catalog
- com.example.ecommerce.domain.orders
- com.example.ecommerce.domain.customers
pagination:
default-page-size: 25
max-page-size: 200
one-indexed-parameters: false
swagger:
enabled: true
title: E-Commerce REST API
description: |
## E-Commerce Platform API
Cette API permet de gérer:
- Catalogue produits
- Commandes clients
- Gestion utilisateurs
### Authentification
Utilise OAuth2 Bearer tokens.
### Rate Limiting
- Utilisateurs authentifiés: 5000 req/h
- Utilisateurs anonymes: 100 req/h
version: 2.5.1
contact-name: API Team
contact-email: api-team@example.com
contact-url: https://example.com/api-docs
license-name: Proprietary
license-url: https://example.com/license
# Logging
logging:
level:
io.springflow: INFO
com.example.ecommerce: DEBUG
Configuration Avancée¶
Propriétés Spring Boot Compatibles¶
SpringFlow s'intègre avec la configuration Spring Boot standard:
Note: Les valeurs springflow.pagination.* prennent le dessus sur spring.data.web.pageable.*.
Variables d'Environnement¶
Toutes les propriétés peuvent être surchargées via variables d'environnement:
# Format: SPRINGFLOW_PROPERTY_NAME
export SPRINGFLOW_ENABLED=true
export SPRINGFLOW_BASE_PATH=/api/v2
export SPRINGFLOW_PAGINATION_DEFAULT_PAGE_SIZE=50
export SPRINGFLOW_SWAGGER_TITLE="My Custom API"
application.properties (Alternative)¶
Si vous préférez le format .properties:
# springflow-starter/src/main/resources/application.properties
springflow.enabled=true
springflow.base-path=/api
springflow.base-packages=com.example.domain
springflow.pagination.default-page-size=20
springflow.pagination.max-page-size=100
springflow.pagination.page-parameter=page
springflow.pagination.size-parameter=size
springflow.pagination.sort-parameter=sort
springflow.pagination.one-indexed-parameters=false
springflow.swagger.enabled=true
springflow.swagger.title=My API
springflow.swagger.description=Auto-generated REST API
springflow.swagger.version=1.0.0
springflow.swagger.contact-name=Support
springflow.swagger.contact-email=support@example.com
Configuration GraphQL¶
Module Optionnel
Le support GraphQL nécessite la dépendance springflow-graphql. Voir le Guide GraphQL pour plus de détails.
Configuration SpringFlow GraphQL¶
springflow:
graphql:
enabled: true # Active le support GraphQL
schema-location: src/main/resources/graphql # Emplacement du schéma généré
graphiql-enabled: true # Active l'interface GraphiQL
introspection-enabled: true # Active l'introspection (désactiver en prod)
Configuration Spring Boot GraphQL (Obligatoire)¶
Configuration Obligatoire
Cette configuration est obligatoire pour que SpringFlow GraphQL fonctionne correctement:
spring:
graphql:
graphiql:
enabled: true # OBLIGATOIRE - active l'infrastructure Spring GraphQL
path: /graphiql # Optionnel - personnalise le chemin GraphiQL
path: /graphql # Optionnel - personnalise le chemin de l'endpoint GraphQL
Pourquoi est-ce obligatoire?
SpringFlow GraphQL dépend de l'infrastructure Spring Boot GraphQL (BatchLoaderRegistry, GraphQlSource, etc.).
Ces beans ne sont créés que lorsque l'auto-configuration Spring Boot GraphQL est activée.
Sans spring.graphql.graphiql.enabled=true, l'application échouera au démarrage avec:
NoSuchBeanDefinitionException: No qualifying bean of type
'org.springframework.graphql.execution.BatchLoaderRegistry' available
Configuration Complète GraphQL¶
springflow:
graphql:
enabled: true
schema-location: src/main/resources/graphql
graphiql-enabled: true
introspection-enabled: false # Recommandé en production
spring:
graphql:
graphiql:
enabled: true
path: /graphiql
path: /graphql
schema:
printer:
enabled: true
Propriétés GraphQL¶
| Propriété | Type | Défaut | Description |
|---|---|---|---|
| SpringFlow GraphQL | |||
graphql.enabled |
boolean | false |
Active le support GraphQL |
graphql.schema-location |
String | src/main/resources/graphql |
Emplacement du schéma |
graphql.graphiql-enabled |
boolean | true |
Active GraphiQL UI |
graphql.introspection-enabled |
boolean | true |
Active l'introspection |
| Spring GraphQL (Obligatoire) | |||
spring.graphql.graphiql.enabled |
boolean | - | OBLIGATOIRE - Active l'infra Spring |
spring.graphql.graphiql.path |
String | /graphiql |
Chemin de l'interface |
spring.graphql.path |
String | /graphql |
Chemin de l'endpoint |
Désactiver GraphQL¶
Pour désactiver GraphQL complètement:
Ou simplement retirer la dépendance springflow-graphql du pom.xml.
Questions Fréquentes¶
Comment désactiver SpringFlow pour certains tests?¶
Comment avoir des pages de 1 à N au lieu de 0 à N-1?¶
Puis-je avoir des configurations différentes par entité?¶
Non, la configuration est globale. Utilisez @AutoApi(pagination = false) pour désactiver la pagination sur une entité spécifique.
Comment accéder à Swagger UI?¶
Par défaut: http://localhost:8080/swagger-ui.html
Avec custom port: http://localhost:9090/swagger-ui.html
La configuration s'applique-t-elle aux composants custom?¶
Partiellement. Le base-path s'applique si vous utilisez @RequestMapping sans chemin complet. Les composants custom ont un contrôle total sur leur comportement.
Voir Aussi¶
- Référence API Configuration - Documentation complète des propriétés
- Installation - Premier pas avec SpringFlow
- Annotations - Configuration au niveau entité
- Pagination - Guide détaillé de la pagination
- Custom Components - Personnalisation avancée
Résumé des Propriétés¶
| Propriété | Type | Défaut | Description |
|---|---|---|---|
enabled |
boolean | true |
Active/désactive SpringFlow |
base-path |
String | /api |
Chemin de base des endpoints |
base-packages |
String[] | [] |
Packages à scanner |
| Pagination | |||
default-page-size |
int | 20 |
Taille de page par défaut |
max-page-size |
int | 100 |
Taille maximum autorisée |
page-parameter |
String | page |
Nom du paramètre de page |
size-parameter |
String | size |
Nom du paramètre de taille |
sort-parameter |
String | sort |
Nom du paramètre de tri |
one-indexed-parameters |
boolean | false |
Pages commencent à 1 si true |
| Swagger | |||
enabled |
boolean | true |
Active Swagger UI |
title |
String | SpringFlow API |
Titre de l'API |
description |
String | Auto-generated... |
Description |
version |
String | 1.0.0 |
Version de l'API |
contact-name |
String | null |
Nom du contact |
contact-email |
String | null |
Email du contact |
contact-url |
String | null |
URL du contact |
license-name |
String | null |
Nom de la licence |
license-url |
String | null |
URL de la licence |
| GraphQL | |||
graphql.enabled |
boolean | false |
Active le support GraphQL |
graphql.schema-location |
String | src/main/resources/graphql |
Emplacement du schéma |
graphql.graphiql-enabled |
boolean | true |
Active GraphiQL UI |
graphql.introspection-enabled |
boolean | true |
Active l'introspection |
Configuration Spring GraphQL Requise
En plus des propriétés ci-dessus, spring.graphql.graphiql.enabled=true est obligatoire pour activer GraphQL.