Membuat REST API dengan Golang Framework Echo

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

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.