Я создаю службу grails, которая будет взаимодействовать с сторонним REST API через библиотеку Java. Библиотека Java требует учетных данных для REST API с помощью URL-адреса, имени пользователя и пароля.
Я хотел бы сохранить эти учетные данные в configuration/Config.groovy, сделать их доступными для службы и убедиться, что учетные данные доступны службе, прежде чем она потребует их.
Я ценю, что grailsApplication.config доступен для контроллеров и что с помощью метода службы в службу могут быть предоставлены соответствующие значения конфигурации, например:
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();
}
}
Я считаю, что этот подход немного испорчен, так как он зависит от контроллера, вызывающего setCredentials(). Наличие авторизованных учетных данных, доступных для службы, будет более надежным.
Является ли один из этих двух вариантов жизнеспособным (я в настоящее время недостаточно знаком с grails):
-
Вставить
grailsApplication.config.apiCredentialsв службу в контроллере при создании службы? -
Предоставить какую-либо форму конструктора в службе, которая позволяет передавать учетные данные службе в момент создания экземпляра?
Наличие учетных данных, введенных в службу, является идеальным. Как это можно сделать?