Как сгенерировать модель данных Kotlin и или Java из схемы GraphQL - PullRequest
3 голосов
/ 31 января 2020

Мой текущий проект переключился на API GraphQL, и я wi sh для автоматизации генерации объектов модели, которые соответствуют запросам / ответам на запросы / мутации.

Все, что мне нужно, - это классы моделей, которые я делаю. я не хочу использовать такие инструменты, как Apollo, во время выполнения в моем приложении.

Я требую, чтобы классы моделей были либо Java, либо Kotlin.

Я нашел это https://www.graphql-java-kickstart.com/tools/schema-definition/

однако для этого мне, кажется, нужно создать классы моделей ...

на основе этого утверждения "GraphQL Java Tools will expect to be given three classes that map to the GraphQL types: Query, Book, and Author. The Data classes for Book and Author are simple:"

Чего мне не хватает ?

Когда я пытаюсь использовать Apollo-cli для загрузки моей схемы, я получаю эту ошибку

~ -  $ npx apollo-cli download-schema $https://my.graphql.end.point/graphql --output schema.json
Error while fetching introspection query result: only absolute urls are supported

Конечно, это базовое требование c при использовании GraphQL

1 Ответ

4 голосов
/ 03 февраля 2020

Так что, если я правильно вас понимаю, вы пытаетесь: а) загрузить и локально создать схему из существующей конечной точки graphql и б) создать java объекты модели из этой схемы.

Для загрузки схемы вы можете использовать graphql-cli. Сначала установите через npm install -g graphql-cli и запустите graphql init, чтобы настроить .graphqlconfig. Наконец, запустите graphql get-schema, чтобы загрузить схему из определенной конечной точки.

Далее вы хотите использовать генератор кода Java, который берет схему GraphQL и создает:

  • Интерфейсы для запросов, мутаций и подписок GraphQL
  • Интерфейсы для объединений GraphQL
  • Классы POJO для типов GraphQL
  • Классы перечислений для каждого перечисления GraphQL

В зависимости от ваших настроек / предпочтений существуют различные варианты (например, Gradle vs Maven):

Я рекомендую вам проверить первый вариант, так как он выглядит очень хорошо документированным и также обеспечивает полную гибкость после генерации желаемых помощников:

graphql- java -generator генерирует шаблонный код и позволяет вам сконцентрироваться на том, что конкретно c для вашего варианта использования. Тогда работающий код не зависит от каких-либо зависимостей от graphql- java -generator. Таким образом, вы можете в любой момент избавиться от graphql- java -generator: просто поместите сгенерированный код в SCM, и все.

В режиме клиента вы можете запросить сервер всего одной строкой. кода.

Например:

Human human = queryType.human("{id name appearsIn homePlanet friends{name}}", "180");

В этом режиме плагин генерирует:

Один java класс для объекта Query , Один java класс для объекта Mutation (если есть), Один POJO для каждого стандартного объекта объекта GraphQL, Вся необходимая среда выполнения фактически прикреплена в виде исходного кода в ваш проект: сгенерированный код является автономным. Таким образом, ваш проект, когда он выполняется, не зависит от какой-либо внешней зависимости от graphql- java -generator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...