Belajar Goravel Framework - Part 2 - Dasar-Dasar REST API di Goravel

Pada bagian ini akan dibahas mengenai Routing Dasar, Controller, Response JSON, dan struktur dasar API tanpa database.

Membuat Controller

Asumsikan kita akan membuat sebuah controller yang mempunyai method Index, Create, Update dan Delete. Misalnya saja kita akan membuat PostController.

Untuk membuat controller di Goravel caranya adalah, masuk ke root directory project, kemudian jalankan perintah berikut:

go run . artisan make:controller PostController

Perintah di atas akan menghasilkan sebuah file controller yang tersimpan pada app/http/controllers/post_controller.go. Adapun di dalam file tersebut terdapat bawaan kode program yang biasanya meliput: deklarasi struct controller, constructor, dan sampel method controller (Index) tersebut.

package controllers

import (
	"github.com/goravel/framework/contracts/http"
)

type PostController struct {
	// Dependent services
}

func NewPostController() *PostController {
	return &PostController{
		// Inject services
	}
}

func (r *PostController) Index(ctx http.Context) http.Response {
	return nil
}	

Kita akan melengkapi method yang ada pada PostController tersebut, sehingga nantinya akan terdapat method Index,Create,Update dan Delete. Kode program PostController setelah ditambahkan method yang dibutukan kurang lebih akan menjadi seperti berikut:

package controllers

import (
	"time"

	"github.com/goravel/framework/contracts/http"
)

type PostController struct {
	// Dependent services
}

func NewPostController() *PostController {
	return &PostController{
		// Inject services
	}
}

func (r *PostController) Index(ctx http.Context) http.Response {
	return ctx.Response().Json(http.StatusOK, http.Json{
		"posts": []map[string]interface{}{
			{"id": 1, "title": "Hello World", "body": "Hello world description", "publish_date": time.Now().Format(time.RFC3339)},
			{"id": 2, "title": "Hello Goravel", "body": "Hello goravel description", "publish_date": time.Now().Format(time.RFC3339)},
		},
	})
}

func (r *PostController) Create(ctx http.Context) http.Response {
	return ctx.Response().Json(http.StatusCreated, http.Json{
		"code":    http.StatusCreated,
		"message": "Post created.",
	})
}

func (r *PostController) Update(ctx http.Context) http.Response {
	return ctx.Response().Json(http.StatusOK, http.Json{
		"code":    http.StatusOK,
		"message": "Post updated.",
	})
}

func (r *PostController) Delete(ctx http.Context) http.Response {
	return ctx.Response().Json(http.StatusNoContent, http.Json{
		"code":    http.StatusNoContent,
		"message": "Post deleted.",
	})
}

Response JSON

Goravel menyediakan helper yang akan memudahkan kita membuat response JSON pada sebuah endpoint.

ctx.Response().Json(status, data)

Format umumnya adalah seperti ini:

ctx.Response().Json(http.StatusOK, http.Json{
    "key": "value",
})

Untuk HTTP status code kita dapat menggunakan http.StatusOK, http.StatusCreated, dsb.

Adapun contoh penggunaanya adalah seperti contoh PostController yang sudah dibahas di atas.

Menambahkan Route

Agar method controller yang kita buat di atas dapat diakses melalui sebuah endpoint maka kita perlu mendaftarkannya ke route Goravel. File route Goravel ada di routes/api.go. Tambahkan route PostController pada file tersebut:

	postController := controllers.NewPostController()
	facades.Route().Get("/posts", postController.Index)
	facades.Route().Post("/posts", postController.Create)
	facades.Route().Put("/posts/{id}", postController.Update)
	facades.Route().Delete("/posts/{id}", postController.Delete)

Kode program lengkap route untuk project kali ini akan seperti ini:

package routes

import (
	"github.com/goravel/framework/facades"

	"goravel/app/http/controllers"
)

func Api() {
	userController := controllers.NewUserController()
	facades.Route().Get("/users/{id}", userController.Show)

	postController := controllers.NewPostController()
	facades.Route().Get("/posts", postController.Index)
	facades.Route().Post("/posts", postController.Create)
	facades.Route().Put("/posts/{id}", postController.Update)
	facades.Route().Delete("/posts/{id}", postController.Delete)
}

Testing Endpoint

Setelah semua penambahan kode program di atas kita lakukan, stop dan jalankan ulang server project kita.

go run .

Ketika semua berjalan sukses, maka kita dapat mencoba endpoint yang kita buat menggunakan tools Rest Client API seperti Postman atau yang lain.

Video Tutorial

Tutorial dalam bentuk video dapat di akses di channel Youtube IndoKoding: https://www.youtube.com/watch?v=1ofDwXRVb3c&t=142s

Tulis Komentar