Есть ли способ установить тайм-аут при выполнении запроса с помощью реализации GraphQL-java? Это кажется довольно простой мерой безопасности, рекомендованной документацией GraphQL, но я ничего не могу найти для этого.
Тайм-аут запроса GraphQL-java
Ответы (1)
Для этого вы можете использовать инструментарий GraphQL Java.
В приведенном ниже примере устанавливается тайм-аут в 3 секунды для каждого сборщика данных. Вы можете использовать переданный экземпляр InstrumentationFieldFetchParameters
, чтобы применить тайм-аут к определенным сборщикам данных (возможно, один в структуре запроса, если вы хотите тайм-аут для всего запроса).
public class TimeoutInstrumentation extends SimpleInstrumentation {
@Override
public DataFetcher<?> instrumentDataFetcher(
DataFetcher<?> dataFetcher, InstrumentationFieldFetchParameters parameters
) {
return environment ->
Observable.fromCallable(() -> dataFetcher.get(environment))
.subscribeOn(Schedulers.computation())
.timeout(3, TimeUnit.SECONDS)
.blockingFirst();
}
}
Вы также можете использовать 2 существующих инструментария для выполнения других проверок, упомянутых на опубликованной вами странице:
Также есть возможность установить тайм-аут на уровне запроса. Однако это вне юрисдикции GraphQL Java. Если вы используете Spring в качестве http-сервера, вы можете установить тайм-аут глобального запроса, используя свойство spring.mvc.async.request-timeout
application. Я почти уверен, что любой другой веб-сервер также будет иметь подобное свойство.