GraphQL определяет три типа операций :
- запрос - выборка только для чтения.
- мутация - запись с последующей выборкой.
- подписка - долгоживущий запрос, извлекающий данные в ответ на исходные события.
То, что вы отправляете на свой сервер, - это объект JSON с одним свойством (query
), значением которого является GraphQL документ , который представляет ваш фактический запрос к службе GraphQL. Это свойство (к сожалению) называется query
по соглашению , но оно не имеет ничего общего с фактической операцией внутри документа, который вы отправляете .
Любая операция, включенная в документ GraphQL, должна иметь следующий формат:
OperationType [Name] [VariableDefinitions] [Directives] SelectionSet
Name
, VariableDefinitions
и Directives
являются необязательными. OperationType
является одним из query
, mutation
или subscription
. SelectionSet
- это набор полей, которые вы запрашиваете для этого типа операции. Только фигурные наборы заключены в фигурные скобки. В вашем примере у вас есть два набора выборок - один содержит поле author
, а другой - поле name
.
Существует исключение из названного сокращения запроса :
Если документ содержит только одну операцию запроса, и этот запрос не содержит переменных и не содержит директив, эта операция может быть представлена в сокращенной форме, в которой отсутствуют ключевое слово и имя запроса.
Другими словами, если ваша операция:
- это запрос
- является единственной операцией в документе
- не содержит определения переменных или директив
Вы можете опустить ключевое слово query
и имя операции. Это оставляет вам только набор выбора, который заключен в набор фигурных скобок.
Итак, ваши первые два примера одинаково верны. Третий пример недопустим, потому что author
не является допустимым видом операции.