graphql-spqr: Как добавить свойство GraphQL к сущности

#graphql #graphql-spqr

#graphql #graphql-spqr

Вопрос:

У меня есть базовый класс сущностей Java.

 public class Result {
  String resultTitle;
  String resultDecription;
}
 

Этот класс возвращается в запросе GraphQL

 @GraphQLQuery(name = "getResult")
public Result getResult() {
  Result result = //get result, e.g. from DB
  return resu<
}
 

Пока это работает нормально. Теперь я хочу вернуть один дополнительный атрибут в запросе GraphQL. Но вычисление этого дополнительного атрибута обходится очень дорого. Поэтому я хочу вернуть его только тогда, когда клиент GraphQL действительно запрашивает его в своем запросе следующим образом:

  • query { getResult() { resultTitle resultDecription } } <== не выполняйте дорогостоящий расчет
  • query { getResult() { resultTitle resultDecription costlyAdditionalProp } } <== ВЫПОЛНИТЕ дорогостоящий расчет

Можно ли это сделать с помощью graphql-spqr?

Ответ №1:

О, это было на самом деле довольно просто. Просто нужно было найти правильный пример из graphql-spqr-examples.

     @GraphQLQuery(name = "costlyAdditionalProp ")
    public Long getCostlyAdditionalProp (@GraphQLContext Result result) {
        return calculationService.doCalculation(result);
    }
 

Комментарии:

1. Да, это правильный способ. В SPQR практически нет документации, поэтому обнаружение функций сложнее, чем нужно. В общем, лучший способ обойти тесты, так как большинство (все?) Но иногда тесты слишком запутаны, чтобы правильно продемонстрировать концепцию…