如何直接访问Hasura GraphQL接口,无需通过管理控制台?
解决Hasura GraphQL接口直接访问的PersistedQueryNotSupported错误
错误原因
这个错误是因为客户端发送了持久化查询(Persisted Query),但Hasura默认未开启该功能支持;或者你使用的请求格式不符合GraphQL接口的要求。
解决方案
1. 开启持久化查询支持
如果你的客户端(如Apollo Client)依赖持久化查询,需要在Hasura的环境变量中添加以下配置:
HASURA_GRAPHQL_ENABLE_PERSISTED_QUERIES: "true"
你的现有配置中已经开启了HASURA_GRAPHQL_DEV_MODE: "true",该模式会允许匿名使用持久化查询,无需额外配置权限。
2. 使用正确的GraphQL请求格式
如果是直接通过HTTP请求访问接口,确保遵循以下规则:
- 使用POST方法,请求头设置
Content-Type: application/json - 请求体示例(替换为你的查询语句):
{ "query": "query { your_table { id name } }", "variables": {} } - 若使用GET请求,需将query进行URL编码后作为参数传递,示例:
http://<hasura-host>:<port>/v1/graphql?query=query%20%7B%20your_table%20%7B%20id%20name%20%7D%20%7D
3. 配置数据表访问权限
即使在开发模式下,Hasura默认也需要为数据表配置权限才能访问:
- 进入Hasura管理控制台,导航到
Data -> 目标数据表 -> Permissions - 为
anonymous角色添加对应的权限(如select权限),测试阶段可暂时开放全权限
4. 重启Hasura服务
修改环境变量后,重启Docker容器使配置生效:
# 若使用docker-compose docker-compose restart hasura # 若直接用docker命令 docker restart <your-hasura-container-id>
内容的提问来源于stack exchange,提问作者Paymahn Moghadasian
相关产品推荐
相关产品推荐

