GraphQL
Поддерживается только производитель
Компонент GraphQL -- это клиент GraphQL, работающий по протоколу HTTP и поддерживающий запросы и мутации, но не подписки. Он использует библиотеку Apache HttpClient (opens in a new tab) .
Пользователям Maven необходимо добавить следующую зависимость для pom.xmlэтого компонента:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-graphql</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>Configuring Options
Компоненты Camel настраиваются на двух отдельных уровнях:
-
уровень компонентов
-
уровень конечной точки
Configuring Component Options
Если параметры variablesи variablesHeaderне заданы, а тело IN представляет собой экземпляр JsonObject, Camel будет использовать его для переменных операции. Если параметры queryи queryFileне заданы, а тело IN представляет собой строку, Camel будет использовать её в качестве запроса. Camel сохранит ответ GraphQL от внешнего сервера в теле сообщения OUT. Все заголовки из сообщения IN будут скопированы в сообщение OUT, что позволит сохранить заголовки при маршрутизации. Кроме того, Camel добавит заголовки HTTP-ответа к заголовкам сообщения OUT.
Examples
Queries
Простые запросы можно определить непосредственно в URI:
from("direct:start")
.to("graphql://http://example.com/graphql?query={books{id name}}")Тело также можно использовать для запроса:
from("direct:start")
.setBody(constant("{books{id name}}"))
.to("graphql://http://example.com/graphql")Запрос также может исходить из заголовка:
from("direct:start")
.setHeader("myQuery", constant("{books{id name}}"))
.to("graphql://http://example.com/graphql?queryHeader=myQuery")Более сложные запросы можно сохранить в файле и ссылаться на них в URI:
booksQuery.graphql file:
query Books { books { id name } }
from("direct:start")
.to("graphql://http://example.com/graphql?queryFile=booksQuery.graphql")Когда файл запроса определяет несколько операций, необходимо указать, какую из них следует выполнить:
from("direct:start")
.to("graphql://http://example.com/graphql?queryFile=multipleQueries.graphql&operationName=Books")Запросы с переменными должны ссылаться на экземпляр JsonObject из реестра:
bookByIdQuery.graphql file:
query BookById($id: Int!) { bookById(id: $id) { id name author } }
@BindToRegistry("bookByIdQueryVariables")
public JsonObject bookByIdQueryVariables() {
JsonObject variables = new JsonObject();
variables.put("id", "book-1");
return variables;
}
from("direct:start")
.to("graphql://http://example.com/graphql?queryFile=bookByIdQuery.graphql&variables=#bookByIdQueryVariables")Запрос, который обращается к переменным через параметр variablesHeader:
from("direct:start")
.setHeader("myVariables", () -> {
JsonObject variables = new JsonObject();
variables.put("id", "book-1");
return variables;
})
.to("graphql://http://example.com/graphql?queryFile=bookByIdQuery.graphql&variablesHeader=myVariables")Mutations
Мутации подобны запросам с переменными. Они определяют запрос и ссылку на компонент переменной
addBookMutation.graphql file:
mutation AddBook($bookInput: BookInput) { addBook(bookInput: $bookInput) { id name author { name } } }
@BindToRegistry("addBookMutationVariables")
public JsonObject addBookMutationVariables() {
JsonObject bookInput = new JsonObject();
bookInput.put("name", "Typee");
bookInput.put("authorId", "author-2");
JsonObject variables = new JsonObject();
variables.put("bookInput", bookInput);
return variables;
}
from("direct:start")
.to("graphql://http://example.com/graphql?queryFile=addBookMutation.graphql&variables=#addBookMutationVariables")Spring Boot Auto-Configuration
При использовании graphql с Spring Boot обязательно используйте следующую зависимость Maven для поддержки автоматической настройки:
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-graphql-starter</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>Компонент поддерживает 3 опции, которые перечислены ниже.
camel.component.graphql.autowired-enabled
-
Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.
-
По умолчанию: true
-
Тип: Boolean
camel.component.graphql.enabled
-
Включить ли автоматическую настройку компонента GraphQL. По умолчанию эта опция включена.
-
По умолчанию:
-
Тип: Boolean
camel.component.graphql.lazy-start-producer
-
Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.
-
По умолчанию: false
-
Тип: Boolean