Hasura 查询操作异常
Hasura query action exception
遇到了一个小问题(我猜)。我在 docker swarm 环境中创建了 c# rest web API。 Rest API 工作正常 - 通过邮递员测试。然后我尝试在同一个 docker 群环境中编写 Hasura 服务。控制台也工作正常。问题出在查询操作上。
代码:
动作定义:
type Query {
getWeatherForecast : [WeatherForecastResonse]
}
新类型定义:
type WeatherForecastResonse {
date : String
temperatureC : Int
temperature : Int
summary : String
}
处理程序:
http://{api ip}:{api port}/WeatherForecast
尝试执行查询时:
query MyQuery {
getWeatherForecast {
temperature
summary
date
temperatureC
}
}
我从响应中得到的只是错误 json:
{
"errors": [
{
"extensions": {
"internal": {
"error": "invalid json: Error in $: not enough input",
"response": {
"status": 405,
"body": "",
"headers": [
{
"value": "Mon, 14 Jun 2021 13:54:00 GMT",
"name": "Date"
},
{
"value": "Kestrel",
"name": "Server"
},
{
"value": "0",
"name": "Content-Length"
},
{
"value": "GET",
"name": "Allow"
}
]
},
"request": {
"body": {
"session_variables": {
"x-hasura-role": "admin"
},
"input": {},
"action": {
"name": "getWeatherForecast"
}
},
"url": "http://{api ip}:{api port}/WeatherForecast",
"headers": []
}
},
"path": "$",
"code": "unexpected"
},
"message": "not a valid json response from webhook"
}
]
}
我通过使用 postman white 调用得到了想要的响应:http://{api ip}:{api port}/WeatherForecast(GET 方法)
我应该在哪里改进,才能最终通过休息获得理想的结果api?
P.S。 hasura 版本:v2.0.0-alpha.4(也尝试过 v1.3.3)
更新:
发布了新版本的网络 API。 WeatherForecastController 内部包含一个带有 POST 属性的新方法。查询保持不变,但现在 graphql 查询 returns 我想要的。
所以问题是:是否有可能 call/access 网络 api 方法使用带有 Hasura 操作查询的 GET 属性?
不,目前不可能,Hasura 总是向操作处理程序发出 POST 请求:
When the action is executed i.e. when the query or the mutation is called, Hasura makes a POST request to the handler with the action arguments and the session variables.
来源:https://hasura.io/docs/latest/graphql/core/actions/action-handlers.html#http-handler
从 v2.1.0 及更高版本开始,我们可以使用 REST 连接器执行此操作。Hasura Actions RESTConnectors Methods
遇到了一个小问题(我猜)。我在 docker swarm 环境中创建了 c# rest web API。 Rest API 工作正常 - 通过邮递员测试。然后我尝试在同一个 docker 群环境中编写 Hasura 服务。控制台也工作正常。问题出在查询操作上。
代码:
动作定义:
type Query {
getWeatherForecast : [WeatherForecastResonse]
}
新类型定义:
type WeatherForecastResonse {
date : String
temperatureC : Int
temperature : Int
summary : String
}
处理程序:
http://{api ip}:{api port}/WeatherForecast
尝试执行查询时:
query MyQuery {
getWeatherForecast {
temperature
summary
date
temperatureC
}
}
我从响应中得到的只是错误 json:
{
"errors": [
{
"extensions": {
"internal": {
"error": "invalid json: Error in $: not enough input",
"response": {
"status": 405,
"body": "",
"headers": [
{
"value": "Mon, 14 Jun 2021 13:54:00 GMT",
"name": "Date"
},
{
"value": "Kestrel",
"name": "Server"
},
{
"value": "0",
"name": "Content-Length"
},
{
"value": "GET",
"name": "Allow"
}
]
},
"request": {
"body": {
"session_variables": {
"x-hasura-role": "admin"
},
"input": {},
"action": {
"name": "getWeatherForecast"
}
},
"url": "http://{api ip}:{api port}/WeatherForecast",
"headers": []
}
},
"path": "$",
"code": "unexpected"
},
"message": "not a valid json response from webhook"
}
]
}
我通过使用 postman white 调用得到了想要的响应:http://{api ip}:{api port}/WeatherForecast(GET 方法)
我应该在哪里改进,才能最终通过休息获得理想的结果api?
P.S。 hasura 版本:v2.0.0-alpha.4(也尝试过 v1.3.3)
更新: 发布了新版本的网络 API。 WeatherForecastController 内部包含一个带有 POST 属性的新方法。查询保持不变,但现在 graphql 查询 returns 我想要的。
所以问题是:是否有可能 call/access 网络 api 方法使用带有 Hasura 操作查询的 GET 属性?
不,目前不可能,Hasura 总是向操作处理程序发出 POST 请求:
When the action is executed i.e. when the query or the mutation is called, Hasura makes a POST request to the handler with the action arguments and the session variables.
来源:https://hasura.io/docs/latest/graphql/core/actions/action-handlers.html#http-handler
从 v2.1.0 及更高版本开始,我们可以使用 REST 连接器执行此操作。Hasura Actions RESTConnectors Methods