Tutorial Golang ke – 38 yang membahas mengenai cara membuat REST API di bahasa program Golang menggunakan tipe JSON. Pada tutorial golang kali ini kita akan mencoba menggunakan method GET dan POST.
Tutorial ini sangat erat hubungannya dengan tutorial sebelumnya yaitu
- Belajar Golang #37 : Menjalankan HTTP Server – WEB
- Belajar Golang #36 : Encoding dan Decoding data JSON
Jika anda belum memahami mengenai kedua teori tersebut silahkan baca dululu.
Oke sudah ?
Jika sudah yuk lanjut lagi, jangan lupa sediain kopi.
Membuat API dengan Method GET
Method GET
paling sering digunakan untuk menampilkan sebuah data json. Maka saya akan berikan contoh pertama dengan method GET.
Method GET dapat di akses melalui browser atau tools api lainnya. Selain itu juga dapat di ambil dari website lainnya, dengan catatan harus mengaktifkan cors.
Yuk langsung saja kita buat.
main.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | package main import ( "encoding/json" "fmt" "log" "net/http" ) // Mahasiswa type Mahasiswa struct { ID int `json:"id"` NIM int `json:"nim"` Name string `json:"name"` } // NewMahasiswa func NewMahasiswa() []Mahasiswa { mhs := []Mahasiswa{ Mahasiswa{ ID: 1, NIM: 123454, Name: "Didik Prabowo", }, Mahasiswa{ ID: 2, NIM: 923454, Name: "Joni Gunawan", }, Mahasiswa{ ID: 3, NIM: 923454, Name: "Muhammad Irwan", }, } return mhs } // GetMahasiswa func GetMahasiswa(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { mhs := NewMahasiswa() datamahasiswa, err := json.Marshal(mhs) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) w.Write(datamahasiswa) return } http.Error(w, "hayo mau ngapain", http.StatusNotFound) } func main() { http.HandleFunc("/mahasiswa", GetMahasiswa) fmt.Println("server running...") if err := http.ListenAndServe(":7000", nil); err != nil { log.Fatal(err) } } |
Saya akan mengakses dengan tools postman
.
Hasilnya :

Perhatikan kode di atas, terdapat http server
yang mengalankan fungsi GetMahasiswa()
. Dimana di dalam fungsi tersebut akan memeriksa dahulu method yang di akses, apabila method itu GET maka akan di teruskan ke baris kode berikutnya.
Kode baris berikutnya memanggil method NewMahasiswa()
, dimana nilai balik dari fungsi tersebut adalah data array dari struct Mahasiswa
. Setelah itu maka data tersebut di ubah format ke dalam tipe byte dengan sintaks marshal
.
Untuk menampilkan ke halaman browser menggunakan kode w.Write(datamahasiswa)
. Agar Format JSON harus menambahkan sintaks w.Header().Set("Content-Type", "application/json")
.
Sedangkan untuk sintaks w.WriteHeader(http.StatusOK)
digunakan untuk memeberikan kode status header. Jika belum paham mengenai kode status http bisa membaca di https://restfulapi.net/http-status-codes/.
Membuat API dengan Method POST
Kalau menggunakan Method POST
ini tidak bisa langsung di akses di browser, tapi dapat menggunakan form HTML
atau Postman
sebagai tools. Di karenakan kita tidak membuat website namun membuat API Web Service dengan Golang maka untuk Uji Coba saya menggunakan Postman
.
Sebelum ke kode program ada hal yang perlu kita pahami tentang input data post. Secara umum dan sering di pakai dapat menggunakan 2 macam cara untuk menerima data yaitu dengan form
dan teks json
, kedua hal ini biasa di sebut content type
. Cara menerima datanya pun berbeda.
Langsung saja kita buat contoh kode golang nya.
main.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | package main import ( "encoding/json" "fmt" "log" "net/http" "strconv" ) // Mahasiswa type Mahasiswa struct { ID int `json:"id"` NIM int `json:"nim"` Name string `json:"name"` } // PostMahasiswa func PostMahasiswa(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var Mhs Mahasiswa if r.Method == "POST" { if r.Header.Get("Content-Type") == "application/json" { // parse dari json decodeJSON := json.NewDecoder(r.Body) if err := decodeJSON.Decode(&Mhs); err != nil { log.Fatal(err) } } else { // parse dari form getID := r.PostFormValue("id") id, _ := strconv.Atoi(getID) getNim := r.PostFormValue("nim") nim, _ := strconv.Atoi(getNim) name := r.PostFormValue("name") Mhs = Mahasiswa{ ID: id, NIM: nim, Name: name, } } dataMahasiswa, _ := json.Marshal(Mhs) // to byte w.Write(dataMahasiswa) // cetak di browser return } http.Error(w, "hayo mau ngapain", http.StatusNotFound) return } func main() { http.HandleFunc("/post_mahasiswa", PostMahasiswa) fmt.Println("server running...") if err := http.ListenAndServe(":7000", nil); err != nil { log.Fatal(err) } } |
Percobaan saya lakukan 2 kali yaitu dengan menggunakan form
data dan raw data json
.
Uji coba dengan Form Data

Uji coba dengan Data JSON

Yuk kita pahami satu per satu.
Routing "/post_mahasiswa"
mengakses fungsi dengan nama PostMahasiswa
. Sama seperti hal nya dengan method GET untuk memeriksa method yang di akses, namun di ganti dengan method POST
.
Untuk menangkap tipe konten yang di inputkan dapat menggunakan kode r.Header.Get("Content-Type")
. Jika tipe tersebut json untuk menerima data harus menggunakan tipe data maupun struct di tandai dengan kode decodeJSON := json.NewDecoder(r.Body)
dan decodeJSON.Decode(&Mhs)
agar masuk struct dengan nama Mahasiswa.
Jika data tersebut bukan json maka untuk mengambil data nya dapat menggunakan sintaks PostFormValue
dan di dalam nya di tulis nama field
nya. Data kembalian terhadap fungsi itu yaitu string
, apabila ingin mengubah ke bentuk tipe data integer
dapat menggunakan manipulasi string yaitu Atoi
.
Sekian tutorial cara membuat Web Service API menggunakan Bahasa Golang. Terima kasih.