GraphQL: в схеме должна быть определена операция запроса - PullRequest
0 голосов
/ 23 января 2020

Моя среда разработки (Phpstorm с JS GraphQL) выдает ошибку заголовка для моей схемы.

Я новичок в GraphQL, на что должен быть установлен запрос, если фактическая операция запроса имеет только мутацию на уровне root?

Ниже приведен фактический запрос, извлеченный из учебника (Shopify) для их API GraphQL. Я копирую свое определение локальной схемы, приведенное ниже, которое пыталось приспособить его форму.

Как видите, запрос полностью вложен в мутацию, поэтому я не знаю, что такое определение запроса в root уровень должен даже иметь.

// graphql.ts

import "isomorphic-fetch";

const buildPricingPlanQuery = (redirectUrl: string) => `mutation {
  appSubscribeCreate(
    name : "Plan 1"
    returnUrl : "${redirectUrl}"
    test : true
    lineItems : [
      {
        plan : {
          appUsagePricingDetails : {
            cappedAmount : {
              amount : 10
              , currencyCode : USD
            }
            terms : "Up to 50 products"
          }
        }
      }
      {
        plan : {
          appRecurringPricingDetails : {
            price : {
              amount : 10
              , currencyCode : USD
            }
            terms : "some recurring terms"
          }
        }
      }
    ]
  )
  {
    userErrors {
      field
      message
    }
    confirmationUrl
    appSubscription {
      id
    }
  }
}`;


export const requestSubscriptionUrl = async (ctx: any, accessToken: string, shopDomain: string) =>  {
  const requestUrl = `https://${shopDomain}/admin/api/2019-10/graphql.json`;

  const response = await fetch(requestUrl, {
    method : 'post'
    , headers : {
      'content-type' : "application/json"
      , 'x-shopify-access-token' : accessToken
    },
    body : JSON.stringify({query: buildPricingPlanQuery(`https://${shopDomain}`)})
  });

  const responseBody = await response.json();
  const confirmationUrl = responseBody
    .data
    .appSubscriptionCreate
    .confirmationUrl;

  return confirmationUrl;
};
// pricingSchema.graphql

# ------------ Minor Types

enum CurrencyCode {
  USD
  EUR
  JPY
}

type cappedAmount {
  amount: Int
  currencyCode : CurrencyCode
}

type appUsagePricingDetails {
  cappedAmount: cappedAmount
}

input PlanInput {
  appUsagePricingDetails: cappedAmount
  terms: String
}

type userErrors {
  field: String
  message: String
}

type appSubscription {
  id: Int
}

# ------------ Major Type and Schema definition

type PricingPlan {
  appSubscribeCreate(
    name: String!
    returnUrl: String!
    test: Boolean
    lineItems: [PlanInput!]!
  ): String
  userErrors: userErrors
  confirmationUrl: String
  appSubscription: appSubscription
}

schema {
  mutation: PricingPlan
}

1 Ответ

2 голосов
/ 23 января 2020

Ошибка, которую вы видите, ссылается на это условие спецификации GraphQL :

Требуется указать тип операции root и тип объекта.

Была пара предложений об устранении этого ограничения, но по состоянию на последнюю (июнь 2018 г.) спецификацию c схема считается недействительной если нет типа запроса. Спецификация c также утверждает, что типы объектов (включая запросы) не могут быть пустыми.

Мой совет: просто добавьте простой тип запроса, например

Если спецификация c обновляется, вы можете удалить его позже:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...