2017-07-18 133 views
0

我有一个工作网络graphql查询为:如何写GraphQL查询

{ 
    me{ 
    ... on Student{ 

     profile { 
     fullName 
     emailId 
     mobileNumber 
     civilId 
     address 
     city 
     state 
     country 
     zipCode 
     userProfilePic 
     userCategory 
     createdAt 
     updatedAt 
     } 

    } 

    } 
} 

它返回一个特定学生的个人资料详细信息。我使用突变记录并获取用户的令牌。

我想,为了使读取请求创建一个graphql文件(例如:StudentProfile.graphql)(类似于HTTP。获得),使用阿波罗客户端。

我提出这个要求来获取graphql查询。

func fetchStudentProfileDetails(){ 

     let tokenString = "Bearer " + "....my token ..." 

     print(tokenString) 


     let newApollo: ApolloClient = { 
      let configuration = URLSessionConfiguration.default 
      // Add additional headers as needed 
      configuration.httpAdditionalHeaders = ["Authorization": tokenString] 

      let url = URL(string: "http://52.88.217.19/graphql")! 

      return ApolloClient(networkTransport: HTTPNetworkTransport(url: url, configuration: configuration)) 
     }() 



     newApollo.fetch(query: StudentProfileQuery()) { (result, error) in 

      self.profileDetailsTextView.text = "Success" 


      if let error = error { 
       NSLog("Error while fetching query: \(error.localizedDescription)"); 
       self.profileDetailsTextView.text = error.localizedDescription 
      } 
      guard let result = result else { 
       NSLog("No query result"); 
       self.profileDetailsTextView.text = "No query result" 
       return 
      } 

      if let errors = result.errors { 
       NSLog("Errors in query result: \(errors)") 

       self.profileDetailsTextView.text = String(describing: errors) 

      } 

      guard let data = result.data else { 

       NSLog("No query result data"); 

       return 
      } 
     } 

    } 

如何将以下网络查询转换为.graphql文件中的查询?

回答

0

我不知道我完全理解你的问题,但你应该能够使用HTTP来进行查询。对于大多数人来说,一个*.gql文件只包含查询作为他们URLEncode的字符串。下面是一个读取变量的例子,但你可以像查询字符串/缓冲区一样读取文件中的查询。

const myQuery = `{ 
    user { 
    name 
    } 
}`; 

const queryURL = "http://52.88.217.19/graphql/?query=" + URLEncode(myQuery); 

fetch(queryURL) 
    .then((result) => { 
    console.log(result); 
    }) 

如果这不能回答你的问题,请帮助我更好地了解你在问什么,我会尝试修改我的答案。

1

所以,你可以调用使用一个简单的NSUrlSession

let headers = ["content-type": "application/json"] 
let parameters = ["query": "mutation { createProfile(fullName: \"test name\" emailId: \"[email protected]\") { id } }"] as [String : Any] 

let postData = JSONSerialization.data(withJSONObject: parameters, options: []) 

let request = NSMutableURLRequest(url: NSURL(string: "https://<url graphql>")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) 
request.httpMethod = "POST" 
request.allHTTPHeaderFields = headers 
request.httpBody = postData as Data 

let session = URLSession.shared 
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in 
    if (error != nil) { 
    print(error) 
    } else { 
    let httpResponse = response as? HTTPURLResponse 
    print(httpResponse) 
    } 
}) 

dataTask.resume() 
创建新文档到Graphql服务器