Я пытаюсь создать простое приложение, которое вызывает API с quarkus-rest-client
. Я должен ввести ключ API в качестве заголовка, который одинаков для всех ресурсов API. Поэтому я хотел бы поместить значение этого ключа API (которое зависит от среды dev/qa/prod
) в файл application.properties
, расположенный в src/main/resources
.
Я пытался разными способами добиться этого:
- Использовать непосредственно
com.acme.Configuration.getKey
в @ClientHeaderParam
значение свойства - Создать класс StoresClientHeadersFactory, который реализует интерфейс ClientHeadersFactory для внедрения конфигурации
Наконец, я нашелописанный ниже способ заставить его работать.
Мой вопрос : есть ли лучший способ сделать это?
Вот мой код:
- StoreService.java , который является моим клиентом для доступа к API
@Path("/stores")
@RegisterRestClient
@ClientHeaderParam(name = "ApiKey", value = "{com.acme.Configuration.getStoresApiKey}")
public interface StoresService {
@GET
@Produces("application/json")
Stores getStores();
}
@ApplicationScoped
public class Configuration {
@ConfigProperty(name = "apiKey.stores")
private String storesApiKey;
public String getKey() {
return storesApiKey;
}
public static String getStoresApiKey() {
return CDI.current().select(Configuration.class).get().getKey();
}
}
- StoresController.java , который является контроллером REST
@Path("/stores")
public class StoresController {
@Inject
@RestClient
StoresService storesService;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Stores getStores() {
return storesService.getStores();
}
}