当前位置: 首页 > 知识库问答 >
问题:

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

于嘉誉
2023-03-14

AWS CLI for AppSync有一系列可爱的功能,可以从工作站的命令行远程管理它,因此我基本上不必使用浏览器控制台。

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

我错过了吗?它在那里吗<我不想再看这个屏幕了。。。

共有3个答案

咸育
2023-03-14

您可以使用Curl执行此操作:

$ curl -H 'x-api-key: <API KEY>' -d '{"query":"query {...}"}' <API URL>
庾才
2023-03-14

graphql python/gql自版本3.0.0rc0起支持AWS AppSync。

它支持实时endpoint上的查询、变异甚至订阅。

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

它有一个gqlcli脚本,允许您从命令行执行查询、更改和订阅。

这里有留档

对于查询和突变,请使用--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!"

对于订阅,请使用--transport-appsync\u-websockets参数:

echo "subscription{onCreateMessage{message}}" | gql-cli $AWS_GRAPHQL_API_ENDPOINT --transport appsync_websockets
令狐晟
2023-03-14

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

但是,您可以使用GUI客户端工具向Appsyncendpoint发送POST。比如邮递员或者失眠(我个人最喜欢的)。然而,如果您的目标是通过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")

为了解释一下,您正在使用对给定'/graphql/endpoint'的appsync的查询发出POST请求。您有3个标题(由-H标志表示)

  1. x-api-key:仅适用于使用API KEY作为授权类型的情况。其他身份验证类型也可以工作,你可能有一个AuthToken:承载,Cognito也可以工作,但从CLI
  2. 来看要复杂得多
  3. 主机:这是你的api给出的ec2主机的名字。您可以通过查看分配的终结点并删除https://和 /graphql
  4. 内容类型:应用程序/json。这是一种标准,不太确定为什么,但它是必须的。

希望这能有所帮助!

 类似资料:
  • 我一直在试图找到一种方法,从我的PC(Windows 7)向Arduino Uno R3发送串行命令。我一直在做这个简单的程序,你应该通过USB电缆发送一个简单的“1”,以便打开车载LED。我的Arduino代码应该可以工作(我知道的,但我会确保上传它)。我一直在尝试使用Python和pySerial发送此命令,但我似乎无法让pySerial正常工作。我也尝试过使用CMD,但当我输入命令(ECHO

  • 问题内容: 关于主题,下面的代码 从Ubuntu运行终端。 运行终端后如何在终端中发出命令? 例如:运行终端并运行命令,例如“ ls”等。 问题答案: 您可以在命令行中提供一些选项,以指定执行的内容。 该选项为您提供大致相同的好处,但您可以将命令行拆分为单独的单词。 二者并同时连接program`s标准输入和输出到端子与可选参数运行该程序。因此,用户可以与终端进行正确的交互。 例: 这将打开终端并

  • 所以我不知道这是否真的描述了我的问题,但这是我能得到的最接近的吗? 我正在使用AWSAppsyncClient进行一些GraphQL突变。由于模型的性质,在更大程度上,由于我缺乏经验,我需要创建一个记录,然后创建两个依赖于第一个的记录,然后才能将它们链接到数据库中。 目前,我正在进行第一次变异,它返回所创建记录的ID。然后在查询返回的promise中创建中间记录。它基本上看起来像: 问题是Prom

  • 我的的部分当前如下所示: ...这意味着我可以运行来启动服务器。到目前为止还不错。 但是,我希望能够运行类似的东西,并将参数传递给(例如,=>)。这可能吗?

  • 我正在创建一个java应用程序,通过PC/SC非接触式阅读器和javax.smartcardioAPI与MifeDesFire卡通信。我设法发送常规的ISO 7816 APDU(CLA,INS,P1-P2,Lc,命令数据,Le)。 我在Ridrix的博客上读到,DESFire卡(至少我正在使用的EV1版本)支持APDU和本地命令,其中大多数命令只有1字节长。 例如,“获取版本”命令: 我用Spri

  • 我是GraphQL新手。我知道这是个很基本的问题。但我花了很多时间却没能成功。 我的需求是我需要从java类使用graphql-java api方法发送GraphQL查询。 以下是查询: