【问题标题】:Execute raw graphQL query using OkHttp Client使用 OkHttp 客户端执行原始 graphQL 查询
【发布时间】:2020-03-14 06:59:03
【问题描述】:

我有一个 graphQL 查询,我想将其作为原始请求执行,并且不想依赖任何客户端来执行此请求(我不想使用 apollo 客户端 for android 来执行它)

我已经创建了形成这个查询的字符串,并尝试使用 OkHttp 客户端发出这个请求,但我认为有一些东西丢失了,因为每次我发送请求时,响应都是内部服务器错误。但是,如果我使用 apollo-client for android 执行此查询,它会返回响应。

这是我使用 OkHttp 执行原始查询请求的尝试:

val requestBodyString = "  cities{\n" +
            "    name\n" +
            "  }"

fun makeRequest(url: String): Response{
        val client = OkHttpClient()
        val requestBody = RequestBody.create(null, requestBodyString)
        val request = Request.Builder().url(url).post(requestBody)
            .addHeader("content-type", "application/graphql").build()
        return client.newCall(request).execute()
    }

我关注yelp documentation 提出请求,但它对我不起作用。我不知道为什么?

【问题讨论】:

    标签: android kotlin graphql apollo-client


    【解决方案1】:

    尝试以 JSON 格式发送

        val query = "  cities{\n" +
                "    name\n" +
                "  }"
    
       fun makeRequest(url: String): Response{
                val client = OkHttpClient()
    
               val json = JSONObject()
               json.put("query",query)
    
                val requestBody = RequestBody.create(null, json.toString())
                val request = Request.Builder().url(url).post(requestBody)
                    .addHeader("content-type", "application/json").build()
                return client.newCall(request).execute()
            }
    

    【讨论】:

      【解决方案2】:

      我最近正在尝试类似的东西。我想出的解决方案是使用编码的查询参数访问 URL。

      String url = url + "query?" + URLEncoder.encode(query);

      我已经成功使用 OkHttp,但我注意到其他一些客户端无法与 GraphQl 通信。

      编辑:无论如何,我使用的 URL 不是安全的 (http),我设置的唯一标头是基本身份验证。

      【讨论】:

        猜你喜欢
        • 2015-05-10
        • 2018-02-18
        • 2019-06-21
        • 2017-01-15
        • 1970-01-01
        • 2017-04-08
        • 1970-01-01
        • 2014-06-11
        • 2022-06-28
        相关资源
        最近更新 更多