Создание мутации GraphQL - PullRequest
       23

Создание мутации GraphQL

0 голосов
/ 05 марта 2019

У меня есть следующий пример мутации:

mutation {
  checkoutCreate(input: {
    lineItems: [{ variantId: "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80", quantity: 1 }]
  }) {
    checkout {
       id
       webUrl
       lineItems(first: 5) {
         edges {
           node {
             title
             quantity
           }
         }
       }
    }
  }
}

Я использую .net Клиент GraphQL .Я хотел бы как-то передать список lineItems на этот запрос.Я сделал следующее:

mutation {
  checkoutCreate(input: {
    $lineItems
  }) {
    checkout {
       id
       webUrl
       lineItems(first: 5) {
         edges {
           node {
             title
             quantity
           }
         }
       }
    }
  }
}

Код C #:

    dynamic lineItems = new List<dynamic>
    {
        new
        {
            variantId = "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80",
            quantity = 2
        }
    };

    var request = new GraphQLRequest
    {
        Query = m_resource.Resource.GetString("CheckoutCreate"), // Gets from resource file the above string
        Variables = lineItems 
    };

    var response = await m_client.PostAsync(request);

Я продолжаю получать:

GraphQLHttpException: Неожиданное HttpResponseMessage с кодом: BadRequest

Есть ли способ сделать это?или мне нужно заменить внутри строки?

РЕДАКТИРОВАТЬ:

Я пробовал это (и 20 других способов и до сих пор получаю ошибки).Все, что я пытаюсь сделать, это передать список LineItems.

mutation CreateCheckout($input: LineItemsInput!) {
  checkoutCreate(input: $input) {
    checkout {
       id
       webUrl
       lineItems(first: 5) {
         edges {
           node {
             title
             quantity
           }
         }
       }
    }
  }
}

        var request = new GraphQLRequest
        {
            Query = m_resource.Resource.GetString("CheckoutCreate"),
            Variables = new
            {
                LineItemsInput = new List<dynamic>
                    {
                        new
                        {
                            variantId = "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80",
                            quantity = 2
                        }
                    }
            }
        };

Запрос Json выглядит следующим образом:

{
  "Query": "mutation CreateCheckout($input: LineItemsInput!) {\r\n  checkoutCreate(input: $input) {\r\n    checkout {\r\n       id\r\n       webUrl\r\n       lineItems(first: 5) {\r\n         edges {\r\n           node {\r\n             title\r\n             quantity\r\n           }\r\n         }\r\n       }\r\n    }\r\n  }\r\n}",
  "OperationName": null,
  "Variables": {
    "LineItemsInput": [
      {
        "variantId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80",
        "quantity": 2
      }
    ]
  }
}

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

В самом запросе необходимо объявить переменную и ее тип .В вашем случае это может выглядеть так:

mutation CreateCheckout($lineItems: [LineItem!]!) {
  checkoutCreate(input: {
    $lineItems
  }) { ... FieldsFromTheQuestion }

Название операции (CreateCheckout) может быть чем-то значимым для вас;он не указан в схеме.

@ ответ galkin, вероятно, также уместен: когда вы делаете запрос, вам нужно передать список элементов строки под ключом "input", совпадающим с именем переменной в запросе. необработанный JSON-запрос должен выглядеть примерно так:

{
  "query": "mutation CreateCheckout ...",
  "variables": {
    "input": [
      {
        "variantId": "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC80",
        "quantity" 2
      }
    ]
  }
}
0 голосов
/ 05 марта 2019

Благодаря @galkin и @David Maze, я решил это так:

mutation checkoutCreate($input: CheckoutCreateInput!) {
  checkoutCreate(input: $input) {
    checkout {
      id
    }
    checkoutUserErrors {
      code
      field
      message
    }
  }
}

c # код:

            var request = new GraphQLRequest
            {
                Query = m_resource.Resource.GetString("CheckoutCreate"),
                Variables = new
                {
                    input = new
                    {
                        LineItems = lineItems // List<LineItem>
                    }
            };
0 голосов
/ 05 марта 2019

Переменные - это объект, одно значение.

С псевдокодом у вас есть variables = lineItems, но вам нужно variables = { lineItems: lineItems }

...