Consume Rest API With Go
Meow
Posted on December 9, 2020
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.
Posted on December 9, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 29, 2024