This Go / Golang client helps you interact with the Stein API.
Stein is a suite of programs to help you turn any Google Sheet to a database. The core Stein API provides RESTful access to your sheets.
$ go get github.com/nasrul21/go-stein
package main
import (
"time"
stein "github.com/nasrul21/go-stein"
)
func main() {
client := stein.NewClient(
"https://api.steinhq.com/v1/storages/5cca0542e52a3545102c1665", // STEIN URL
// you can set the option nil, if your stein doesn't need authentication
&stein.Option{
Username: "user", // your STEIN API username
Password: "password", // your STEIN API password
Timeout: 20 * time.Second, // set timeout for Stein Request, default: 15s
},
)
...
}
client.Read(sheetName, filter, v)
Name | Description | Format | Requirement |
---|---|---|---|
sheetName | Your sheet name | String | Required |
filter | Filter / Query data by column name | map[string]interface{} | Optional (nil) |
v | The result will be given to v |
Struct / map[string]interface{} | Required |
// set read option
readOption := stein.ReadOption{
// don't set a `Search` field, if you wanna get all data
Search: map[string]interface{
"ID": 134,
}
}
var result []YourStruct
status, err := client.Read("Sheet1", readOption, &result)
// if you want to get the data without filter
// status, err := client.Read("Sheet1", nil, &result)
if err != nil {
log.Fatal("Error read from stein: " + err)
return
}
fmt.Printf("HTTP Status: %d \n", status)
fmt.Printf("Result : %v \n", result)
client.Insert(sheetName, body) (status, res, err)
Name | Description | Format | Requirement |
---|---|---|---|
sheetName | Your sheet's name | String | Required |
body | The data you want to add | Array of Struct | Required |
Name | Description | Format |
---|---|---|
status | HTTP Status Response | Number (Status Code) |
res | Response of updated range | InsertResponse |
err | Error message | error |
type Employee struct {
Name string `json:"name"`
Department string `json:"department"`
Position string `json:"position"`
}
employees := []Employee{
{
Name: "Nasrul",
Department: "Technology",
Position: "Software Engineer",
},
// add another field of you want to insert multiple rows
// {
// ...
// },
}
status, res, err := client.Insert("Sheet1", employees)
if err != nil {
log.Fatal("Error insert data to stein: ", status, err.Error())
return
}
fmt.Printf("HTTP Status: %d \n", status)
fmt.Printf("Updated Range : %v \n", res)
client.Update(sheetName, set, where) (status, res, err)
Name | Description | Format | Requirement |
---|---|---|---|
sheetName | Your sheet's name | String | Required |
set | The column values to set | {column: value, ...} | Required |
where | The column values to search for | {column: value, ...} | Optional |
Name | Description | Format |
---|---|---|
status | HTTP Status Response | Number (Status Code) |
res | Response of updated range | UpdateResponse |
err | Error message | error |
employee := Employee{
Name: "Nasrul",
Department: "Technology",
Position: "Software Engineer",
}
where := map[string]interface{}{
"ID": 156,
}
status, res, err := client.Update("Sheet1", employee, where)
if err != nil {
log.Fatal("Error update data to stein: ", status, err.Error())
return
}
fmt.Printf("HTTP Status: %d \n", status)
fmt.Printf("Updated Range : %v \n", res)
client.Delete(sheetName, condition) (status, res, err)
Name | Description | Format | Requirement |
---|---|---|---|
sheetName | Your sheet's name | String | Required |
condition | The column values to search for | {column: value, ...} | Required |
Name | Description | Format |
---|---|---|
status | HTTP Status Response | Number (Status Code) |
res | Response of updated range | DeleteResponse |
err | Error message | error |
status, res, err := client.Delete("Sheet1", map[string]interface{}{
"ID": 156,
})
if err != nil {
log.Fatal("Error delete data: ", status, err.Error())
return
}
fmt.Printf("HTTP Status: %d \n", status)
fmt.Printf("Deleted Range : %v \n", res)