Setelah artikel sebelumnya kita sudah mencoba membuat REST API dengan Golang tanpa framework, selanjutnya adalah mencoba beberapa framework Golang yang bisa digunakan untuk membuat aplikasi web. Kali ini saya akan mencoba menggunakan Framework Echo.
Slogan dari framework ini adalah “High performance, extensible, minimalist Go web framework”, yang di dalamnya menawarkan minimalitas dan kemudahan dalam penggunaan serta menghasilkan aplikasi yang memiliki performa tinggi.
Persiapan
Saya menggunakan struktur direktori yang mirip dengan artikel sebelumnya agar bisa sambil belajar struktur dan pemanggilan fungsinya. Pertama-tama, buat dahulu direktori projectnya, saya menggunakan nama golang-echo, sehingga perintahnya apda terminal / console adalah seperti ini.
mkdir golang-echo
cd golang-echo
go mod init golang-echo
selanjutnya adalah mengunduh framework echo dengan perintah seperti berikut
go get -u github.com/labstack/echo/v4
Buat dahulu file main.go, buka dan edit dengan editor kesayangan kalian
touch main.go
package main
import (
"github.com/labstack/echo/v4"
)
func main() {
e := echo.New()
e.Logger.Fatal(e.Start(":8080"))
}
Dari function main bisa dilihat kode untuk inisialisai framework Echo dan menjalankannya di port yang ditentukan (dalam hal ini 8080). Jika tidak ada kendala, aplikasi akan berjalan normal, namun kita belum bisa menjalankan karena belum ada routingnya.
Model Entity
Model entity disini sama dengan artikel sebelumnya, buat direktori entities, di dalamnya buat file product.go dengan isi sebagai berikut
package entities
type Product struct {
ID uint64 `json:"id"`
Name string `json:"name"`
Price float64 `json:"price"`
Description string `json:"description"`
}
Controllers Handler
Buat direktori dengan nama controllers dan di dalamnya buat file dengan nama product_controller.go. Isinya adalah seperti berikut, ,kita buat beberapa fungsi yang dibutuhkan dalam metode REST API. Dalam artikel ini kita belum menggunakan akses ke DB, sehingga fungsinya masih menggunakan fungsi sederhana sebagai berikut
package controllers
import (
"golang-echo/entities"
"log"
"net/http"
"strconv"
"github.com/labstack/echo/v4"
)
func Hello(c echo.Context) error {
return c.String(http.StatusOK, "Hello World")
}
func GetProduct(ctx echo.Context) error {
return ctx.String(http.StatusOK, "All Products here")
}
func GetProductById(ctx echo.Context) error {
product := new(entities.Product)
product_id, err := strconv.ParseUint(ctx.Param("id"), 10, 64)
if err != nil {
log.Fatal(err)
}
product.ID = product_id
product.Name = "Product dari struct"
product.Price = 10000
product.Description = "Product ini didapatkan dari struct"
response := struct {
Status string
Data entities.Product
}{
Status: "success",
Data: *product,
}
return ctx.JSON(http.StatusOK, response)
}
func CreateProduct(ctx echo.Context) error {
product := new(entities.Product)
ctx.Bind(product)
return ctx.JSON(http.StatusOK, product)
}
func UpdateProduct(ctx echo.Context) error {
return ctx.String(http.StatusOK, "Product updated")
}
func DeleteProduct(ctx echo.Context) error {
return ctx.String(http.StatusOK, "Product deleted")
}
Nantinya pada artikel berikutnya, isi dari tiap fungsi akan diubah untuk koneksi ke database.
Setup main.go
Saatnya menggabungkan kode-kode yang sudah dibuat ke dalam main.go. Langkah pertama adalah membuat fungsi handler yang berisi routing ke setiap fungsi di controller
func ProductHandler(e *echo.Echo) {
e.GET("/", controllers.Hello)
e.GET("/products", controllers.GetProduct)
e.POST("/products", controllers.CreateProduct)
e.GET("/products/:id", controllers.GetProductById)
e.PUT("/products/:id", controllers.UpdateProduct)
e.DELETE("/products/:id", controllers.DeleteProduct)
}
fungsi tersebut dipanggil dalam function main setelah inisialisasi Echo, sehingga func main kita menjadi seperti berikut
func main() {
e := echo.New()
ProductHandler(e)
e.Logger.Fatal(e.Start(":8080"))
}
Jalankan dengan perintah
go run main.go
Jika sukses, kita bisa mencoba melakukan request ke dalam aplikasi
curl -X GET 'http://localhost:8080/products'
curl -X GET 'http://localhost:8080/products/1'
curl -X POST \
'http://localhost:8080/products' \
--header 'Content-Type: application/json' \
--data-raw '{
"id":12,
"name":"New Barang",
"price":777888,
"description":"Deskripsi barang yang digunakan"
}'
Dalam artikel berikutnya, akan kita update dengan GORM untuk melakukan koneksi dan manajemen database.
Semoga bermanfaat