如何调用graphql API
Posted
技术标签:
【中文标题】如何调用graphql API【英文标题】:How to call graphql API's 【发布时间】:2019-04-09 15:11:37 【问题描述】:如何在视图控制器中调用 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 周围的值无效。
而且它在邮递员中也能完美运行并获得输出。任何人请帮我找出解决方案。
【问题讨论】:
您的服务未提供正确的 JSON 是 GraphQL API 的类型,所以我觉得应该只能这样传递... 【参考方案1】:这是您当前发送的文档:
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 "
【讨论】:
非常感谢......我不知道如何表达我的感谢。你救了我。我需要更多帮助,这对于正常的 API 调用来说是可以的,如果我必须这样做这与 apollo 方法 API.swift 文件始终是一个空文件,请您帮我找出我的项目出了什么问题。 我还没有使用过 Apollo ios,所以我不太确定。根据文档“因为 Apollo iOS 生成特定于查询的结果类型,API.swift 此时将大部分为空,除非您已经向目标目录添加了一些带有查询或突变的 .graphql 文件”。我将从这里的文档开始,然后从那里开始:apollographql.com/docs/ios/installation.html以上是关于如何调用graphql API的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Java 应用程序调用 GraphQL 端点 [重复]
如何在 Spring Boot + GraphQL Java 工具的上下文中执行对 GraphQL 的 Java 调用?