Как вызвать API-интерфейс graphql

Как вызвать 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: \"[email protected]\", 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()`

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

Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo = {NSDebugDescription=Invalid value around character 0.}

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

Ваш сервис не предоставляет правильный JSON

Hussain Chhatriwala 06.11.2018 10:20

Это тип GraphQL API, поэтому я думаю, что его следует передавать только так ...

Angel F Syrus 06.11.2018 11:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
906
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

{
  query:mutation  {
    signin(email: "[email protected]", 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: "[email protected]", password: "qwerty") {
    result {
      token
      firstName
      lastName
      profileImage
      status
    }
  }
}

или...

let query = "mutation { signin(email: \"[email protected]\", password: \"qwerty\") { result { token firstName lastName profileImage status } } }"

Большое спасибо .... Я не знаю, как выразить свою благодарность. Вы спасли меня. И мне нужна еще одна помощь. Это нормально для обычного вызова API, и если мне нужно сделать это с помощью метода apollo, API.swift Файл всегда пустой. Не могли бы вы помочь мне выяснить, что не так с моим проектом.

Angel F Syrus 07.11.2018 05:20

Я еще не работал с Apollo iOS, поэтому не совсем уверен. Согласно документам, «поскольку Apollo iOS генерирует типы результатов для конкретных запросов, API.swift на этом этапе будет в основном пустым, если вы еще не добавили в целевой каталог несколько файлов .graphql с запросами или изменениями». Я бы начал с документации здесь и пошел бы оттуда: apollographql.com/docs/ios/installation.html

Daniel Rearden 07.11.2018 05:55

Другие вопросы по теме