Tutorial Golang REST API + MySQL — Part 1
Tutorial belajar REST API Golang + MySQL (READ)
Tutorial Golang REST API + MySQL — Part 1
Tutorial belajar REST API Golang + MySQL (READ)
Pada kali ini gue mau berbagi insight mengenai Golang yang lagi rame-ramenya dibicarakan banyak orang. Namun di post kali ini gue engga akan ngebahas kenapa Golang digunakan banyak orang dan kenapa Golang itu salah satu bahasa pemrograman terbaik untuk Backend. Namun gue ada referensi dari pertanyaan-pertanyaan itu.
- https://hackernoon.com/why-go-ef8850dc5f3c?gi=e0e21ffc3abd
- http://letzgro.net/blog/9-reasons-to-choose-golang-for-your-next-web-application/
- https://medium.com/@saginadir/why-i-love-golang-90085898b4f7 Oke itu awalnya, sekarang gue curhat dulu. Gue akuin kalo belajar Golang ini bisa dibilang susah pas awal. Kalo lo kebiasaan make PHP atau Javascript, lo perlu waktu dalam memahami bahasa backend yang satu ini. Karena bisa dibilang strukturnya sangat sulit untuk dicustom, dia punya rule-rule dimana kita gabisa seenak udel nulis code.
Tutorial ini merupakan tutorial yang telah ditulis oleh Indra Octama, gue hanya menulis ulang code yang ia tulis dan merubahnya dengan gaya gue sendiri. Gue juga sudah izin dengan beliau, kalo ada yang berkenan mampir ke blognya silahkan aja klik disini.Oke, kita akan segera ngebuat REST API pake Golang. Dengan masuk ke post ini, gue anggep lo adalah seorang yang pernah ngoding dengan bahasa apapun, dan bukan seorang newbie yang bertanya REST API tuh apaan?
Pertama, pastiin lo udah install Golang dan udah nyetting sesuai kebutuhan custom lo kalo lo mau. Kalo lo mau belajar basic Golang atau liat cara install-nya gue bisa arahkan lo ke blog ini.
Abis itu buat satu database baru, terserah lo namanya apalah, kalo gue golang. Lalu buat table dengan nama person dengan struktur seperti pada query dibawah ini.
CREATE TABLE IF NOT EXISTS person ( id int(11) NOT NULL AUTO_INCREMENT, first_name varchar(50) NOT NULL DEFAULT ‘0’, last_name varchar(50) NOT NULL DEFAULT ‘0’, PRIMARY KEY (id))Kedua, buat sebuah projek (folder) baru. Terserah namanya apaan, gue sih kasih nama learngolang.
Ketiga, buat sebuah file main.go
Sebelum masukkin kalian harus install dulu package Mux dan MySQLDi tutorial ini kita pake framework Mux untuk Routing URLnya saja
Install dulu neh
go get github.com/go-sql-driver/mysqlgo get github.com/gorilla/muxSetelah install dua packages-nya, lanjut deh isi file main.go dengan code dibawah
package mainimport ( “fmt” “log” “net/http” _ “github.com/go-sql-driver/mysql” “github.com/gorilla/mux”)func main() { router := mux.NewRouter() router.HandleFunc(“/getproducts”, returnAllProducts).Methods(“GET”) http.Handle(”/”, router) fmt.Println(“Connected to port 1234”) log.Fatal(http.ListenAndServe(“:1234”, router))}Keempat, buat sebuah file mysql.go, disini kita akan konekkin mysql kita dengan projek kita.
package mainimport ( “database/sql” “log”)func connect() *sql.DB { db, err := sql.Open(“mysql”, “xxx:yyy@tcp(zzz:3306)/database”) if err != nil { log.Fatal(err) } return db}Nah seperti yang kita bisa liat, berikut gue jelasin
xxx, itu diisi sama username host lo, kalo pake xampp biasanya root.yyy, itu diisi sama password, hapus aja yyy nya kalo emang kosong.zzz, itu diisi sama hostnya, kalo pake xampp biasanya 127.0.0.1 atau localhostdatabase, itu diisi sama nama databasenya.
Kelima, kita buat model nya dulu dong, buat sebuah file baru bernama model.go isinya adalah Struct yang akan diisi dalam pengembalian hasilnya.
package maintype Users struct { Id string form:"id" json:"id" FirstName string form:"firstname" json:"firstname" LastName string form:"lastname" json:"lastname"}type Response struct { Status int json:"status" Message string json:"message" Data []Users}Disini kita akan memasukkan data Users kedalam Response, tujuannya kenapa? Agar kita membuat default response dan akan ditangkap oleh Frontend Developer dengan standarisasi.
Keenam, kita akan ngebuat tempat ngelempar datanya, yuk kita buat dengan code seperti ini.
package mainimport ( “encoding/json” “log” “net/http”)func returnAllUsers(w http.ResponseWriter, r *http.Request) { var users Users var arr_user []Users var response Response db := connect() defer db.Close() rows, err := db.Query(“Select id,first_name,last_name from person”) if err != nil { log.Print(err) } for rows.Next() { if err := rows.Scan(&users.Id, &users.FirstName, &users.LastName); err != nil { log.Fatal(err.Error()) } else { arr_user = append(arr_user, users) } } response.Status = 1 response.Message = “Success” response.Data = arr_user w.Header().Set(“Content-Type”, “application/json”) json.NewEncoder(w).Encode(response)}Gue jelasin sedikit ya, banyak deng.
Kita melakukan inisiasi variable users yang didapatkan dari Struct Users.Setelah itu kita akan memasukkan hasil dari table kita dan dimasukkan kedalam array, maka buatlah sebuah variable arr_users dengan tipe data Array Struct Users.Jangan lupa buat variable response untuk memasukkan semua hasil Response kedalam response yang akan dilempar.
Setelah itu kita akan melakukan konek ke database, konsepnya mirip Java dimana setiap kita akan melakukan SELECT data dari table, maka kita akan membuka koneksi dulu. Kalo di Laravel kenapa tidak ada seperti ini? karena Laravel telah menggunakan ORM (Object Relational Mapper, adalah teknik untuk memetakan tabel dari database menjadi objek php). defer db.Close() adalah method dimana kita akan menutup koneksi ke database setelah fungsi returnAllUsers dijalankan.
kita mulai memanggil fungsi query dan setelah dipanggil biasakan untuk cek apakah error atau tidak, ini adalah rule khusus Golang dimana programmer harus membiasakan mengecek output error untuk menghindari hal yang tidak diinginkan.
lakukan perulangan, kita akan memasukkan data-data yang ada di table person kedalam array Users.
Setelah itu isi data struct Response dengan data yang harus dimasukkan seperti Status adalah integer, Message adalah string, dan terakhir Data adalah object array yang kita miliki.
Lalu isi headernya kita set dengan application/json agar kembalian dari Json kita bertipe Json dan bukan plain text.
Setelah itu kita encode responsenya.
Sekarang jalankan dengan cara
go buildsetelah menjalankan perintah tersebut kita akan mendapatkan namafolder.exe, tinggal kita jalankan saja. Tenang saja ini file aman kok tidak ada virus hehehe.
Jika berhasil maka akan mendapatkan result seperti ini. Sekarang kita lakukan hit ke route **localhost:1234/users **dengan postman.
Taraa, berikut adalah hasilnya.
Oke sekian dulu yang dapat gue kasitau, next time gue ajarin buat CUD-nya. Goodluck and Happy Coding! ^^
Artikel ini merupakan konten legacy dari blog Medium (Tahun 2018). Beberapa konsep atau sintaks mungkin sudah mengalami perubahan pada versi terbaru.