ruby-on-rails 调用第三方Graphql API

nbewdwxp  于 2023-03-24  发布在  Ruby
关注(0)|答案(2)|浏览(148)

我一直试图通过阅读文章来理解GraphQl以及它是如何使用的。我已经看到了如何通过graphQl创建一个API,但是我还没有看到一篇文章演示第三方如何调用graphQl api。
根据我的经验,我主要使用httparty gem(我使用ruby on rails)调用RESTful API,其格式如下:HTTParty.post(url, headers, body) .
然而,调用graphQL API的人如何发出此请求?他们是否需要将graphql安装到他们的应用程序中才能发出请求?(理想情况下,所有内容都应该在api文档中?)或者我误解了graphql的工作原理?

ilmyapht

ilmyapht1#

在API中,客户端(第三方应用程序)可以通过向服务器发送GraphQL查询来发出请求,服务器将返回JSON响应
要发出GraphQL请求,客户端通常会向GraphQL API端点发送POST请求,其中包含包含GraphQL查询的JSON有效负载。请求还可以包含变量,这些变量可用于将动态数据传递给查询。示例:

POST /graphql HTTP/1.1
    Content-Type: application/json
    Authorization: Bearer <token>

    {
      "query": "query ($id: ID!) { user(id: $id) { name } }",
      "variables": {
        "id": "123"
      }
    }

在本例中,asking GraphQL返回ID为123的用户名。query字段包含GraphQL查询,variables字段包含变量id,用于获取具有给定id的用户
客户端不需要将GraphQL安装到他们的应用程序中。客户端可以使用任何支持使用JSON有效载荷发送POST请求的HTTP客户端库,如Ruby中的httpart。客户端不需要知道任何关于GraphQL模式或类型的信息,因为这些信息可以在API文档中找到。
关于使用GraphQL的GET与POST请求的说明;对于需要变量或变化的更复杂的查询,通常建议使用POST请求。GET请求最适合不需要复杂输入的简单查询。关于GET请求的另一个警告是一些GraphQL API可能不支持GET请求,因此希望确保检查文档以查看支持哪些请求方法

flseospp

flseospp2#

没有必要安装GraphQL,因为它是一个不可知的规范,类似于RESTful服务。GraphQL告诉你(在模式中)为了接收你的响应,你需要发送什么。
例如,如果我正在调用一个Books API我会发送一个GET请求来获取图书列表,如下所示:

//request
HTTP GET /books

//response
{[
{
  "bookId":34443,
  "author":"Borges",
  "title":"Otras inquisiciones"
},
{
  "bookId":34445,
  "author":"Borges",
  "title":"Ficciones"
}
]}

不同之处(确切地说,是众多不同之一)在于GraphQL API允许您选择所需的数据,在本例中:

//GraphQL exposes a single endpoint to the outer world
//request
HTTP POST /graphql 
//body
query{
  allbooks{
    title
  }
}

//response
{[
{
  "title":"Otras inquisiciones"
},
{
  "title":"Ficciones"
}
]}

因此,在您的情况下,您应该将body化为与您尝试使用的GraphQL API模式一致,并将其在HTTP POST请求中发送到端点:HTTParty.post(url, headers, body)

相关问题