Как вызывать API GraphQl - PullRequest
       9

Как вызывать API GraphQl

0 голосов
/ 06 ноября 2018

Как вызывать API-интерфейсы graphql внутри контроллера представления. Я вызываю API, подобный приведенной ниже структуре

let url = URL(string: "http://xxxx.com/graphql")!

var request = URLRequest(url: url)
request.httpMethod = "POST"

let query = "{query:mutation {\n  signin(email: \"adc.inlove@gmail.com\", password: \"qwerty\") {\n    result {\n      token\n      firstName\n      lastName\n      profileImage\n      status\n    }\n  }\n}\n}"
let body = ["query": query]
request.httpBody = try! JSONSerialization.data(withJSONObject: body, options: [])
request.cachePolicy = .reloadIgnoringLocalCacheData

let task = URLSession.shared.dataTask(with: request, completionHandler: { data, _, error in
    if let error = error { print(error); return }
    guard let data = data else { print("Data is missing."); return }
    do {
        let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
        print(json)
    } catch let e {
        print("Parse error: \(e)")
    }
})
task.resume()`

Но он показывает ошибку как,

Ошибка домена = NSCocoaErrorDomain Code = 3840 «Недопустимое значение вокруг символа 0.» UserInfo = {NSDebugDescription = Недопустимое значение вокруг символа 0.}

, а также он отлично работает в почтальоне и получает вывод. Любой, пожалуйста, помогите мне найти решение.

1 Ответ

0 голосов
/ 06 ноября 2018

Это документ, который вы сейчас отправляете:

{
  query:mutation  {
    signin(email: "adc.inlove@gmail.com", password: "qwerty") {
      result {
        token
        firstName
        lastName
        profileImage
        status
      }
    }
  }
}

Это неправильный синтаксис для документа GraphQL. На основании спецификации документ должен иметь следующий формат:

OperationType [Name] [VariableDefinitions] [Directives] SelectionSet

где скобки обозначают необязательные элементы, тип операции - один из query, mutation или subscription, а набор выбора - это одно или несколько полей, заключенных в набор фигурных скобок.

Если тип операции опущен, предполагается, что документ является запросом. Это называется «стенограммой запроса». Таким образом, дан правильный запрос, например:

query SomeOperationName {
  users {
    name
  }
}

Следующее эквивалентно:

{
  users {
    name
  }
}

Вышесказанное относится только к запросам, но не к мутациям. Учитывая все вышеизложенное, ваш документ имеет дополнительный набор фигурных скобок и недопустимый тип операции. Минимально измените его на:

mutation {
  signin (email: "adc.inlove@gmail.com", password: "qwerty") {
    result {
      token
      firstName
      lastName
      profileImage
      status
    }
  }
}

или ...

let query = "mutation { signin(email: \"adc.inlove@gmail.com\", password: \"qwerty\") { result { token firstName lastName profileImage status } } }"
...