mirror of
https://github.com/lukaszraczylo/go-simple-graphql.git
synced 2026-10-12 00:45:31 +00:00
edc695fe2bd9f212310197e6a376f960d44679ac
Simple GraphQL client
Ps. It's Hasura friendly.
Reasoning
I've tried to run a few GraphQL clients with Hasura, all of them required conversion of the data into
the appropriate structures, causing issues with non-existing types ( thanks to Hasura ), for example, bigint which was difficult to export.
Therefore, I present you the simple client to which you can copy & paste your graphQL query, variables and you are good to go.
Features
- Executing GraphQL queries as they are, without types declaration
- HTTP2 support!
- Support for additional headers
- Query cache
Usage example
Environment variables
GRAPHQL_ENDPOINT- Your GraphQL endpoint. Default:http://127.0.0.1:9090/v1/graphqlGRAPHQL_CACHE- Should the query cache be enabled? Default:falseGRAPHQL_CACHE_TTL- Cache TTL in seconds for SELECT type of queries. Default:5LOG_LEVEL- Logging level. Default:infoRETRIES_ENABLE- Should retries be enabled? Default:falseRETRIES_NUMBER- Number of retries: Default:1RETRIES_DELAY- Delay in retries in milliseconds. Default:250
Example reader code
import (
fmt
graphql "github.com/lukaszraczylo/go-simple-graphql"
)
headers := map[string]interface{}{
"x-hasura-user-id": 37,
"x-hasura-user-uuid": "bde1962e-b42e-1212-ac10-d43fa27f44a5",
}
variables := map[string]interface{}{
"fileHash": "123deadc0w321",
}
query := `query searchFileKnown($fileHash: String) {
tbl_file_scans(where: {file_hash: {_eq: $fileHash}}) {
racy
violence
virus
}
}`
gql := graphql.NewConnection()
result, err := gql.Query(query, variables, headers)
if err != nil {
fmt.Println("Query error", err)
return
}
fmt.Println(result)
Result
{"tbl_user_group_admins":[{"id":109,"is_admin":1}]}
Working with results
I'm using an amazing library tidwall/gjson to parse the results and extract the information required in further steps and I strongly recommend this approach as the easiest and close to painless, for example:
result := gjson.Get(result, "tbl_user_group_admins.0.is_admin").Bool()
if result {
fmt.Println("User is an admin")
}
Languages
Go
99.6%
Makefile
0.4%