Je suis en train de créer un service grails qui va interagir avec une API REST tierce via une bibliothèque Java. La bibliothèque Java requiert des informations d'identification pour l'API REST au moyen d'une url, d'un nom d'utilisateur et d'un mot de passe.
J'aimerais stocker ces informations d'identification dans le fichier configuration/Config.groovy
Les informations d'identification peuvent être utilisées par un service et garantissent que les informations d'identification sont disponibles pour le service avant qu'il n'en ait besoin.
J'apprécie cela grailsApplication.config
est disponible pour les contrôleurs et que, par l'intermédiaire d'une méthode d'un service, les valeurs de configuration pertinentes peuvent être fournies au service, comme ceci :
package example
class ExampleController {
def exampleService
def index = { }
def process = {
exampleService.setCredentials(grailsApplication.config.apiCredentials)
exampleService.relevantMethod()
}
}
package example
import com.example.ExampleApiClient;
class ExampleService {
def credentials
def setCredentials(credentials) {
this.credentials = credentials
}
def relevantMethod() {
def client = new ExampleApiClient(
credentials.baseUrl,
credentials.username,
credentials.password
)
return client.action();
}
}
Je pense que cette approche est légèrement imparfaite car elle dépend d'un contrôleur appelant setCredentials()
. La mise à disposition automatique des informations d'identification au service serait plus robuste.
Est-ce que l'une ou l'autre de ces deux options est viable (je ne suis pas assez familier avec grails) :
-
Injecter
grailsApplication.config.apiCredentials
dans le service dans le contrôleur lorsque le service est créé ? -
Fournir une forme de constructeur sur le service qui permette de transmettre les informations d'identification au service au moment de l'instanciation ?
L'idéal est d'injecter les informations d'identification dans le service. Comment cela pourrait-il se faire ?