Java ライブラリを介してサードパーティの REST API と対話する grails サービスを作成しています。Java ライブラリには、URL、ユーザー名、およびパスワードによる REST API の資格情報が必要です。
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()
ます。資格情報をサービスで自動的に利用できるようにすると、より堅牢になります。
これら2つのオプションのいずれかが実行可能ですか(私は現在、grailsに十分に精通していません):
grailsApplication.config.apiCredentials
サービスの作成時にコントローラーでサービスに注入しますか?インスタンス化時に資格情報をサービスに渡すことを可能にする、何らかの形式のコンストラクターをサービスに提供しますか?
クレデンシャルをサービスに注入するのが理想的です。これはどのように行うことができますか?