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