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 делает для того, чтобы "клиент смог выбрать именно то, что ему нужно"?
Есть похожая библиотека на 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 с аутентификацией и авторизацией (в том числе и подписок) вы можете посмотреть здесь:
>> А чем он вообще лучше SQL через http(s)?
GraphQL и SQL решают соверешенно разные (я бы сказал перпендикулярные) задачи, и никак между собой не пересекаются. SQL это язык построения запросов к реляционным СУБД. GraphQL это по сути язык формального описания API микросервисов. Сравнивать между собой эти спецификации, это все равно, что сравнивать между собой апельсин и ветер. Что хуже, а что лучше?
Схожие с GraphQL задачи решает протокол Google Protocol Buffers. Вот их имеет смысл между собой сравнивать.
Единственная статья на хабре про графы, которая мне зашла
GraphQL + SPQR + Spring Boot Starter 2021