api - 如何查询 gRPC 端点?
问题描述
这可能是一个愚蠢的问题,但我正在努力弄清楚 gRPC 究竟做了什么。我有这个 endpoing access-mainnet-beta.onflow.org:9000 ( https://docs.onflow.org/access-api/ )
我很想访问,但我不一定想下载他们的 SDK。
我从来没有使用过仅 rpc 的 REST 和 websocket API,所以我很难理解如何让 gRPC 运行。不幸的是,对 gRPC 的所有“基本介绍”对我来说没有任何意义,而且我还没有找到关于如何从 gRPC 端点请求数据的教程。
任何帮助都会很棒,即使它是指向可以向我解释的教程的链接。
问候,
解决方案
gRPCurl是与 gRPC 服务器交互的有用工具。
REST 和 gRPC 之间存在显着差异:
- gRPC使用HTTP2(REST一般使用HTTP1.1)
- gRPC 需要一个模式(通常是一个 protobuf)
如果 gRPC 服务支持反射,您将能够grpcurl [host:port] list
. 如果没有,您需要获取模式(protobuf)的副本,以便 gRPCurl 可以与服务器交互。
我无法连接,access-mainnet-beta.onflow.org:9000
但是:
grpcurl \
-plaintext \
access.devnet.nodes.onflow.org:9000 \
list
Failed to list services: server does not support the reflection API
因此,看来您需要获取 protos 并将它们传递给grpcurl
.
和:
# list
grpcurl flow-testnet.g.alchemy.com:443 list
flow.access.AccessAPI
# list methods for the above service
grpcurl flow-testnet.g.alchemy.com:443 list flow.access.AccessAPI
flow.access.AccessAPI.ExecuteScriptAtBlockHeight
flow.access.AccessAPI.ExecuteScriptAtBlockID
flow.access.AccessAPI.ExecuteScriptAtLatestBlock
flow.access.AccessAPI.GetAccount
flow.access.AccessAPI.GetAccountAtBlockHeight
flow.access.AccessAPI.GetAccountAtLatestBlock
flow.access.AccessAPI.GetBlockByHeight
flow.access.AccessAPI.GetBlockByID
flow.access.AccessAPI.GetBlockHeaderByHeight
flow.access.AccessAPI.GetBlockHeaderByID
flow.access.AccessAPI.GetCollectionByID
flow.access.AccessAPI.GetEventsForBlockIDs
flow.access.AccessAPI.GetEventsForHeightRange
flow.access.AccessAPI.GetLatestBlock
flow.access.AccessAPI.GetLatestBlockHeader
flow.access.AccessAPI.GetLatestProtocolStateSnapshot
flow.access.AccessAPI.GetNetworkParameters
flow.access.AccessAPI.GetTransaction
flow.access.AccessAPI.GetTransactionResult
flow.access.AccessAPI.Ping
flow.access.AccessAPI.SendTransaction
# describe `Ping`
grpcurl flow-testnet.g.alchemy.com:443 describe flow.access.AccessAPI.Ping
flow.access.AccessAPI.Ping is a method:
rpc Ping ( .flow.access.PingRequest ) returns ( .flow.access.PingResponse );
# invoke `Ping`
grpcurl flow-testnet.g.alchemy.com:443 flow.access.AccessAPI.Ping
ERROR:
Code: Unauthenticated
Message: Missing api_key in metadata
我猜你需要一个 API 密钥才能继续。
推荐阅读
- botframework - MS Teams 消息扩展 submitTask 在 iPhone Teams 应用程序中不起作用
- python - 实现 pandas_datareader 模块的问题
- xamarin - 在 Xamarin Essentials 中为本地 Android 开发设置 Web Authenticator
- angular8 - 如何在图表的点上显示数据标签?ng2chart
- r - flagging data by date per group in R
- mysql - Mysql 错误:试图在数据库中查找列
- amazon-ec2 - 如何强制创建一个新的 EC2 实例而不是更新 terraform 中的现有实例?
- javascript - 发送 json 响应但有大量数据
- excel - 统计ID出现的次数,新建一个展示次数不重复的表
- multithreading - Threads.@spawn 和 Threads.@threads 有什么区别?