Синтаксически вы можете определить запрос или мутацию в схеме так, чтобы она возвращала тип. Однако определение операции (то есть запрос или изменение, вызванное клиентом) должно иметь SelectionSet, поэтому я должен сделать:
mutation X { field }
Таким образом, результатом моей мутации или запроса должен быть объект с полями, он не может быть скаляром. Это правильно? Такое чувство, что я должен просто вернуть скаляр. Результат всегда упаковывается в конверт при отправке через HTTP, поэтому результат будет действительным JSON в любом случае (простой скаляр не является строго допустимым JSON).
Я правильно понимаю?


Фактически вы можете вернуть скаляр, например Boolean или String
type Mutation {
hello(who: String!): String
}
Выдача этого запроса
mutation foo {
hello("peter")
}
результат будет выглядеть так
data.hello // string
Протестировал это с помощью graphql-yoga + graphql-play:
Я играю с graphql-yoga и «игровой площадкой graphql», и примеры работают ...
Да, GraphiQL, похоже, тоже нравится, но спецификация, похоже, указывает на то, что он недействителен. Поскольку я хочу вернуть скаляры, я возьму на себя реальность, а не спецификацию!
@TomQuarend в приведенном выше примере действителен в соответствии со спецификацией. За именем мутации следует набор выбора, содержащий поле приветствия.
Я не нашел утверждения о скалярных типах в результатах запроса в схеме GraphQL, но этот пример: spec.graphql.org/June2018/#example-50137 Похоже, считается, что он возвращает строку из запроса.
Используя что? Когда я попробовал, GraphiQL не понравился синтаксис, а спецификация явно не допускает этого. Я подозреваю, что реализация сервера ДЕЙСТВИТЕЛЬНО допускает это, но в спецификации определение операции состоит в том, что за ней следуют SelectionSet и нет SelectionSet (opt)