Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Субботний GraphQL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41898
Привет всем.

Я здесь буду тихонько флудить на тему GraphQL.

Линки по теме.
https://graphql.org/
https://github.com/graphql-java/graphql-java


Вопрос.1 Решил запилить учебную схему Scott https://livesql.oracle.com/apex/livesql/file/content_O5AEB2HE08PYEPTGCFLZU9YCV.html в виде GrapQL API

Вот что вышло. Можете комментировать.

scalar DateTime

type Dept {
    deptno:    ID!,
    dname:     String,
    loc:       String,
    employees: [Emp!]!
}

type Emp {
    empno:    ID!,
    ename:    String,
    job:      String,
    mgr:      Int,
    hiredate: DateTime,
    sal:      Int,
    comm:     String
}

Тут вместо реляции получается агрегация. Возможно это ОК? Или нет?

Вопрос.2 Как дорого стоит поддержка полноценного enpoint при условии что источних постоянно видоизменяется
и дорабатывается. По сути мой вопрос касается сложности реализации query/mutate.

Какие способы простого связывания данных существуют "из коробки" ? Базируюсь на предположении что наша
система смотрит в классическую реляционную БД. Как в примерах со схемой scott. Хотелось бы просто указать
в RuntimeWiring что есть две таблицы и всё.

Вопрос.3 StarWars API. Есть ли где-то поднятый рабочий ендпоинт. Раньше был тут https://graphql.org/swapi-graphql/ (по документации)
но сейчас не доступен.
8 июн 19, 20:56    [21905235]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41898
А вот доки тут более конкретные https://www.graphql-java.com/documentation/v12/
9 июн 19, 00:32    [21905275]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
Sergunka
Member

Откуда:
Сообщений: 1905
mayton,

Коллега новую работу ищите? У меня хорошего знакомого в Теслу взяли только благодаря, что он GraphQL знал. На самом деле работ с ним не так уж много.
9 июн 19, 02:48    [21905288]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
Sergunka
Member

Откуда:
Сообщений: 1905
https://www.graphql-java.com/tutorials/getting-started-with-spring-boot/#try-out-the-api

Вот вроде как туториал, который показывает как работать с плейграунд

https://github.com/prisma/graphql-playground
9 июн 19, 02:59    [21905289]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41898
Нет с работой все в порядке.
И GraphQL не ключевая технология.
9 июн 19, 09:38    [21905314]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41898
Sergunka
https://www.graphql-java.com/tutorials/getting-started-with-spring-boot/#try-out-the-api

Вот вроде как туториал, который показывает как работать с плейграунд

https://github.com/prisma/graphql-playground

Мы архитектурно отказались от Spring-Boot в новом проекте. Пока backend - это Jetty-like application.
9 июн 19, 10:33    [21905331]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
Sergunka
Member

Откуда:
Сообщений: 1905
mayton
Sergunka
https://www.graphql-java.com/tutorials/getting-started-with-spring-boot/#try-out-the-api

Вот вроде как туториал, который показывает как работать с плейграунд

https://github.com/prisma/graphql-playground

Мы архитектурно отказались от Spring-Boot в новом проекте. Пока backend - это Jetty-like application.


Вам надо в сторону Го двигаться тогда.
9 июн 19, 20:33    [21905516]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41898
Не можем. Бизнес-аналитика тесно завязана на Java-технологии.
9 июн 19, 21:15    [21905532]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41898
По интроспекции вопрос.

Решил пока на кошках потренироваться. Есть сервис https://metaphysics-production.artsy.net/

Помню что первый запрос схемы выглядит так:

{
  __schema {
    types {
      name
      description
    } 
  }
}


Среди типов нахожу ExternalPartner

 {
          "name": "ExternalPartner",
          "description": null
        },


Далее - поскольку это кастомный тип. Хочу посмотреть какие у него есть поля.

Как?

Пробую
{
  external_partner {
    id
    city
    name
  }
}


{
  ExternalPartner {
    id
    city
    name
  }
}

Они выдают разные ошибки. Мне и лень цитировать. Все говорят о том что я не то делаю. Прошу прощения что
пока не могу их всех адекватно расшировать. Мало знаний по graphql.

Каким образом я мог знать спецификацию полей не подглядывая в DocumentationExplorer (справа)?
Насколько я понимаю эта мета тоже должна была извлечена из __schema или других спец-вьюх?

Каких?

Грубо говоря мне надо представить что я не человек а бот который собирает просто сведенья по доменной модели.
9 июн 19, 21:41    [21905536]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41898
Ага. Значит таблички с маленькой буквы.
query {
  orders {
    id
    createdAt
    state
    total
    customer    
    items {
      quantity
      price      
    }
  }
}

Но в моём кейсе с схемой EMP/DEBT в агрегации будет стоять DEBT.
9 июн 19, 23:22    [21905564]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41898
С позволения господ Бэнкса и Порселло - я копипащу фрагмент книги GraphQL.

Принципы проектирования GraphQL

Несмотря на то что GraphQL не контролирует, как вы создаете свой
API, спецификация предлагает некоторые рекомендации 1 .

Иерархичность. GraphQL-запрос является иерархическим. Поля
встраиваются в другие поля, и запрос формируется подобно дан-
ным, которые он возвращает.

Ориентированность на продукт. GraphQL управляется потреб-
ностями данных клиента, а также языком и временем выполнения,
поддерживаемыми клиентом.

Строгая типизация. Сервер GraphQL поддерживается системой
GraphQL. В схеме каждая точка данных имеет определенный тип,
насчет которого она будет проверена.

Запросы, определенные клиентом. Сервер GraphQL предоставляет
возможности, которые клиенты могут использовать.

Интроспектива. Язык GraphQL может запрашивать серверную
систему типов GraphQL


По запросам - непонятно. Возможно перевод хреновый.

Что за точка данных? Непонятно. Надо искать по книге.

А.... то что я называл интроспекция... они тут назвали интроспектива. Ну ладно.

Иерархичность. Хм.. честно я ожидал графовость. Ну ладно. Возможно это также можно трактовать.
9 июн 19, 23:28    [21905567]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41898
А.. точка - это endpoint.
9 июн 19, 23:32    [21905569]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41898
Продолжим. По запросам.

Допустим мне интересно смотреть список сотрудников. И выборочно одного сотрудника.

type Query {

    employee(empno: ID!): Emp

    employees: [Emp]!

}


Здесь сразу возникает некая избыточность. Зачем мне 2 метода? Хочется как-то обобщить? Но как.

И констрейнты.

Вот эти варианты - понятны.

Здесь - not null
Emp!


Здесь - всегда список.
[Emp]!


А это что за Хрень?
[Emp!]!
24 июн 19, 11:15    [21913917]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
забыл ник
Member

Откуда:
Сообщений: 2945
видио непустой список
24 июн 19, 12:14    [21913944]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41898
Список минимум из 1 элемента?
24 июн 19, 13:55    [21914072]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
забыл ник
Member

Откуда:
Сообщений: 2945
я GraphQL не знаю, но в скале такой тип очень распространен, называется NEL(NonEmptyList). Часто применяется при валидациях различных, когда у тебя два исхода - либо корректный результат либо непустой список с ошибками. Тогда тебе не надо проверять что список не пустой, чтобы отобразить первое сообщение об ошибке.
24 июн 19, 14:40    [21914122]     Ответить | Цитировать Сообщить модератору
 Re: Субботний GraphQL  [new]
mayton
Member

Откуда: loopback
Сообщений: 41898
Создатели этого фреймворка - фанаты Node.

Вторая половина книги Бэнкса и Порселло - полностью посвящена примерам на Node.JS (Apollo Server)
что для меня создает некоторые неудобства. Ну да ладно. Потрачу несколько дней.
24 июн 19, 14:56    [21914135]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить