如何从命令行向 AWS AppSync 发送 GraphQL 查询?

Joh*_*Mee 4 aws-cli graphql aws-appsync

用于 AppSyncAWS CLI有一系列可爱的功能,可以从我工作站的命令行远程管理它,这样我在大多数情况下不必使用浏览器控制台。

但是要进行查询,我必须进入 Web 浏览器控制台并在 AppSync 下找到 GraphQl 查询。我可以通过 CLI 更改所有方式,但我找不到简单地发出 graphql 查询的命令。

我错过了吗?它在吗?
不想再看这个画面了……

AWS AppSync 查询

小智 6

Appsync 查询页面实际上是几个事物的结合。您不能根据 ( https://docs.aws.amazon.com/cli/latest/reference/appsync/index.html )从 CLI 发出查询

但是,您可以使用 GUI 客户端工具将 POST 发送到您的 Appsync 端点。像 Postman 或 Insomnia(我个人最喜欢的)。但是,您的目标是真正通过 CLI 发送符合 GraphQL 的查询,然后您将不得不求助于“curl”

这是我拥有的一个示例 python 脚本,它向我的 Appsync API 发送 curl 请求。

#!/usr/bin/env python3
import os

cmd = """curl -i -H 'Content-Type: application/json' -H "x-api-key: <ENTER YOUR API KEY FROM THE APPSYNC SETTINGS PAGE>" -H "Host: <ENTER YOUR HOST ENDPOINT FROM THE APPSYNC API SETTINGS PAGE >" -X POST -d '{"query": "query {listEvents {items {id}}}"}' https://<ENTER YOUR HOST ENDPOINT FROM THE APPSYNC API SETTINGS PAGE>/graphql"""

def doGraphqlRequest():    
    os.system(cmd)

print("Starting request to Appsync endpoint")
doGraphQLRequest()
print("Finsihed request to Appsync endpoint")
Run Code Online (Sandbox Code Playgroud)

稍微解释一下,您正在向给定“/graphql/ 端点”的 appsync 发出 POST 请求和查询。您有 3 个标题(由 -H 标志表示)

  1. x-api-key:仅当您使用 API KEY 作为身份验证类型时才适用。其他身份验证类型也可以使用,您可能有一个 AuthToken: Bearer ,而 Cognito 也可以使用,但从 CLI 来看要复杂得多
  2. 主机:这是您的 api 给出的 ec2 主机的名称。您可以通过查看分配的端点并删除 https:// 和 /graphql 来找到它
  3. 内容类型:应用程序/json。这是一种标准,不太确定为什么,但它是必须的。

希望这可以帮助!

  • 三个痛点:1)测试:如果我可以编写脚本,我可以编写测试来针对端点运行,以检查一切是否正常运行并按预期工作2)开发:当浏览器超时时,它通常会忘记我正在处理的查询;记住定期将查询保存到临时文件是很痛苦的;忘记更糟糕 3) DEV:我通常更喜欢在 IDE 中的文件上进行开发,而不是在浏览器文本输入上进行开发,但开发周期是(IDE 中的 hack 后端 -&gt; 部署 -&gt; 浏览器中的 hack 查询)(重复)。这是一个缓慢而糟糕的循环。 (2认同)

les*_*usz 1

graphql-python/gql从版本 3.0.0rc0开始支持 AWS AppSync 。

它支持实时端点上的查询、突变甚至订阅。

它支持 IAM、api 密钥和 JWT 身份验证方法。

它有一个gql-cli脚本,允许您从命令行执行查询、突变和订阅。

该文档可在此处获取

对于查询和突变,请使用--transport appsync_http参数:

# Put the request in a file
$ echo 'mutation createMessage($message: String!) {
  createMessage(input: {message: $message}) {
    id
    message
    createdAt
  }
}' > mutation.graphql

# Execute the request using gql-cli with --transport appsync_http
$ cat mutation.graphql | gql-cli $AWS_GRAPHQL_API_ENDPOINT --transport appsync_http -V message:"Hello world!"
Run Code Online (Sandbox Code Playgroud)

对于订阅,请使用--transport appsync_websockets参数:

echo "subscription{onCreateMessage{message}}" | gql-cli $AWS_GRAPHQL_API_ENDPOINT --transport appsync_websockets
Run Code Online (Sandbox Code Playgroud)