Pull to refresh

Comments 12

@GraphQLQuery(name = "getAllBalance")
public List<BankAccountDto> getAll() {
  return service.getAll();
}

Ненене, погодите, а паджинация, фильтрация, сортировка - это все руками надо делать чтоли?

Спасибо за замечание, поправлю статью в ближайшее время

Я имел в виду более прямую связь между GraphQL-фасадом и источником данных. Например программист определяет источник данных на уровне "select * from BankAccounts", а SPQR берёт на себя управление частями "where", "order by" и "skip/limit".

Вот у вас написано:

GraphQL — это язык запросов к API-интерфейсам. Он отображает предоставляемые сервером данные, чтобы клиент смог выбрать именно то, что ему нужно.

Что именно SPQR делает для того, чтобы "клиент смог выбрать именно то, что ему нужно"?

Добавлю работу с querydsl

Есть похожая библиотека на Java под названием Elide, которая позволяет следовать не только GraphQL, но и JSON-API спецификации. Не сравнивали?

JSON-API очень удобная спецификация. Хорошо описывает не только чтение, но и запись. Вот пост с сравнением: https://dri.es/headless-cms-rest-vs-jsonapi-vs-graphql

По своему опыту могу сказать, что следование JSON-API при взаимодействии FE<->BE сводит согласования только к согласованию реляционных моделей. Что очень позитивно сказывается на скорости интеграции.

Я считаю, что GraphQL - крайне небезопасная спецификация с точки зрения security. Какие стандартные способы Spring (либо какие-то иные) существуют для авторизации запросов GraphQL. Нигде развития этой темы я серьёзно не видел, начиная с Метеора (Apollo), и кончая вот этими костылями. Да, все давно с помощью Spring Data научились прозрачно мэппить репозитории Spring Data на какие-то эндпоинты. Sprind Data REST (HATEOAS), OpenAPI (Swagger), odata (Olingo2). Но там речь идёт о семантике REST-endpoints, для которых подходит как стандартная Sping Security, так и куча других костылей. Как быть в случае GraphQL, природа не подсказывает. А чем он вообще лучше SQL через http(s)? За исключением агрегации запросов? Есть ли в java какие-то способы/фреймворки/библиотеки, поддерживающие солидную авторизацию (не аутентификацию) запросов с помощью GraphQL, и исключающие injection?

Все GraphQL запросы и мутации выполняются поверх HTTP, и здесь аутентификация и авторизация ничем не отличается от REST.

Есть некоторые проблемы с аутентификацией подписок - там открывается вебсокет, и начинает работать специфичный messaging протокол, в котором, к сожалению, явно не прописали, где именно нужно слать токен. Кто то шлет его в сообщении GQL_CONNECTION_INIT, кто то в header запроса. Так что некоторая путаница присутствует.

Пример GraphQL сервиса на Spring Boot с аутентификацией и авторизацией (в том числе и подписок) вы можете посмотреть здесь:

https://github.com/ermadmi78/kobby-gradle-example

>> А чем он вообще лучше SQL через http(s)?

GraphQL и SQL решают соверешенно разные (я бы сказал перпендикулярные) задачи, и никак между собой не пересекаются. SQL это язык построения запросов к реляционным СУБД. GraphQL это по сути язык формального описания API микросервисов. Сравнивать между собой эти спецификации, это все равно, что сравнивать между собой апельсин и ветер. Что хуже, а что лучше?

Схожие с GraphQL задачи решает протокол Google Protocol Buffers. Вот их имеет смысл между собой сравнивать.

Единственная статья на хабре про графы, которая мне зашла

Sign up to leave a comment.

Articles