Consume Api With GO
A few days ago I have to look at consuming API with GO from Ghost so here is what I learnt.
A very simple example of how to consume API and print it as text to console. It’s not much but it’s good to start.
package main
import ( "fmt" "io/ioutil" "log" "net/http" "os" )
func main() { var endpoint = "http://your-addres.domain/api/endpoint"
response, err := http.Get(endpoint)
if err != nil {
fmt.Print(err.Error())
os.Exit(1)
}
responseData, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(responseData))
}
Next, it will be good if I can return objects to use in my app instead of text. And go has to function for it called unmarshall
. Unmarshalling JSON response need JSON module so I have to import "encoding/json"
.
Another thing I need was struct in which will be my json respone parsed. Following syntax is example for Ghost API for posts.
type Response struct {
Posts []Post `json: "posts"`
}
type Post struct {
Id string json: "id"
Title string json: "title"
Slug string json: "slug"
Excerpt string json: "excerpt"
Html string json: "html"
}
and define new variable in main function var responseObject Response
next i add unmarshall after response which will parse json string to my object syntax for it is as follows:
json.Unmarshal(responseData, &responseObject)
Now you can go trough array of object.
for _, post := range responseObject.Posts {
fmt.Println("Id:", post.Id, "with title:", post.Title, "slug:", post.Slug)
}
Complete example is here:
package main
import ( "encoding/json" "fmt" "io/ioutil" "log" "net/http" "os" )
type Response struct {
Posts []Post json: "posts"
}
type Post struct {
Id string json: "id"
Title string json: "title"
Slug string json: "slug"
Excerpt string json: "excerpt"
Html string json: "html"
}
func main() { var endpoint = "http://your-addres.domain/api/endpoint" var responseObject Response
response, err := http.Get(endpoint)
if err != nil {
fmt.Print(err.Error())
os.Exit(1)
}
responseData, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
// fmt.Println(string(responseData))
json.Unmarshal(responseData, &responseObject)
for _, post := range responseObject.Posts {
fmt.Println("Id:", post.Id, "with title:", post.Title, "slug:", post.Slug)
}
}
Thank You for reading.
💜 Thank You!
URLs
- You can also check my status page or micro.blog if you want know what I'm doing
Projects
- I hosing my projects on GitHub
- I'm currently working on Api Client for the omg lol service.