Как вызвать 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.}
а также он отлично работает в почтальоне и получает вывод. Кто-нибудь, пожалуйста, помогите мне найти решение.
Это тип GraphQL API, поэтому я думаю, что его следует передавать только так ...





Это документ, который вы сейчас отправляете:
{
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 Файл всегда пустой. Не могли бы вы помочь мне выяснить, что не так с моим проектом.
Я еще не работал с Apollo iOS, поэтому не совсем уверен. Согласно документам, «поскольку Apollo iOS генерирует типы результатов для конкретных запросов, API.swift на этом этапе будет в основном пустым, если вы еще не добавили в целевой каталог несколько файлов .graphql с запросами или изменениями». Я бы начал с документации здесь и пошел бы оттуда: apollographql.com/docs/ios/installation.html
Ваш сервис не предоставляет правильный JSON