如何在视图控制器中调用graphql API。我正在调用如下结构的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代码= 3840“字符0周围的值无效。” UserInfo = {NSDebugDescription =字符0周围的值无效。}
它也可以在邮递员中正常工作并获得输出。任何人都可以帮助我找出解决方案。
答案 0 :(得分:2)
这是您当前正在发送的文档:
{
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
中的一种,选择集是一个或多个包含在花括号中的字段。 / p>
如果省略操作类型,则假定文档为查询。这称为“查询速记”。因此,给出一个有效的查询,例如:
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 } } }"