Halo teman-teman semuanya, pada artikel sebelumnya kita semua telah belajar bagaimana cara melakukan proses update data di Go dengan Rest API dan pada kesempatan kali ini kita semua akan belajar bagaimana cara melakukan proses delete data di Go dengan Rest API.
Langkah 1 - Menambahkan Function DeletePost
di Controller
Sekarang, silahkan teman-teman buka file controllers/postsController.go
, kemudian ubah semua kode-nya menjadi seperti berikut ini.
controllers/postController.go
package controllers
import (
"errors"
"net/http"
"santrikoding/backend-api/models"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
)
// type validation post input
type ValidatePostInput struct {
Title string `json:"title" binding:"required"`
Content string `json:"content" binding:"required"`
}
// type error message
type ErrorMsg struct {
Field string `json:"field"`
Message string `json:"message"`
}
// function get error message
func GetErrorMsg(fe validator.FieldError) string {
switch fe.Tag() {
case "required":
return "This field is required"
}
return "Unknown error"
}
// get all posts
func FindPosts(c *gin.Context) {
//get data from database using model
var posts []models.Post
models.DB.Find(&posts)
//return json
c.JSON(200, gin.H{
"success": true,
"message": "Lists Data Posts",
"data": posts,
})
}
// store a post
func StorePost(c *gin.Context) {
//validate input
var input ValidatePostInput
if err := c.ShouldBindJSON(&input); err != nil {
var ve validator.ValidationErrors
if errors.As(err, &ve) {
out := make([]ErrorMsg, len(ve))
for i, fe := range ve {
out[i] = ErrorMsg{fe.Field(), GetErrorMsg(fe)}
}
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errors": out})
}
return
}
//create post
post := models.Post{
Title: input.Title,
Content: input.Content,
}
models.DB.Create(&post)
//return response json
c.JSON(201, gin.H{
"success": true,
"message": "Post Created Successfully",
"data": post,
})
}
// get post by id
func FindPostById(c *gin.Context) {
var post models.Post
if err := models.DB.Where("id = ?", c.Param("id")).First(&post).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})
return
}
c.JSON(200, gin.H{
"success": true,
"message": "Detail Data Post By ID : " + c.Param("id"),
"data": post,
})
}
// update post
func UpdatePost(c *gin.Context) {
var post models.Post
if err := models.DB.Where("id = ?", c.Param("id")).First(&post).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})
return
}
//validate input
var input ValidatePostInput
if err := c.ShouldBindJSON(&input); err != nil {
var ve validator.ValidationErrors
if errors.As(err, &ve) {
out := make([]ErrorMsg, len(ve))
for i, fe := range ve {
out[i] = ErrorMsg{fe.Field(), GetErrorMsg(fe)}
}
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errors": out})
}
return
}
//update post
models.DB.Model(&post).Updates(input)
c.JSON(200, gin.H{
"success": true,
"message": "Post Updated Successfully",
"data": post,
})
}
// delete post
func DeletePost(c *gin.Context) {
var post models.Post
if err := models.DB.Where("id = ?", c.Param("id")).First(&post).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})
return
}
//delete post
models.DB.Delete(&post)
c.JSON(200, gin.H{
"success": true,
"message": "Post Deleted Successfully",
})
}
Dari perubahan kode di atas, kita menambahkan fungsi baru dengan nama DeletePost
.
// delete post
func DeletePost(c *gin.Context) {
//...
}
Di dalam fungsi di atas, pertama kita mendeklarasikan sebuah variable bernama post
dengan tipe data models.Post
. Ini berarti variable post
akan digunakan untuk menyimpan data post.
var post models.Post
Kemudian kita membuat kondisi untuk mencari data post berdasarkan context c.Param("id")
. Jika tidak ditemukan, maka kita akan menampilkan response error Record not found!
.
if err := models.DB.Where("id = ?", c.Param("id")).First(&post).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})
return
}
Tapi jika data ditemukan, maka kita akan menghapus data post yang ada di dalam variable post
.
//delete post
models.DB.Delete(&post)
Terakhir, kita tinggal mengembalikan sebuah response dengan format JSON yang berisi informasi data post yang telah dihapus.
c.JSON(200, gin.H{
"success": true,
"message": "Post Deleted Successfully",
})
Langkah 2 - Membuat Route API Delete Post
Sekarang, kita lanjutkan untuk membuat route untuk proses delete data post, jadi silahkan teman-teman buka file main.go
, kemudian ubah kode-nya menjadi seperti berikut ini.
main.go
package main
import (
"santrikoding/backend-api/controllers"
"santrikoding/backend-api/models"
"github.com/gin-gonic/gin"
)
func main() {
//inisialiasai Gin
router := gin.Default()
//panggil koneksi database
models.ConnectDatabase()
//membuat route dengan method GET
router.GET("/", func(c *gin.Context) {
//return response JSON
c.JSON(200, gin.H{
"message": "Hello World!",
})
})
//membuat route get all posts
router.GET("/api/posts", controllers.FindPosts)
//membuat route store post
router.POST("/api/posts", controllers.StorePost)
//membuat route detail post
router.GET("/api/posts/:id", controllers.FindPostById)
//membuat route update post
router.PUT("/api/posts/:id", controllers.UpdatePost)
//membuat route delete post
router.DELETE("/api/posts/:id", controllers.DeletePost)
//mulai server dengan port 3000
router.Run(":3000")
}
Di atas, kita menambahkan route baru dengan method DELETE
dan path yang digunakan adalah /api/posts/:id
.
//membuat route delete post
router.DELETE("/api/posts/:id", controllers.DeletePost)
Langkah 3 - Uji Coba Rest API Delete Post
Silahkan restrat server Go-nya terlebih dahulu, yaitu dengan cara distop dan start lagi.
Silahkan teman-teman buka aplikasi Postman
, kemudian masukkan URL berikut ini http://localhost:3000/api/posts/1 dan untuk method-nya silahkan pilih DELETE
.
Di atas, kita berikan contoh melakukan get data dengan ID 1
Jika sudah, silahkan klik Send
dan jika berhasil maka kita akan mendapatkan response JSON yang kurang lebih seperti berikut ini.
{
"message": "Post Deleted Successfully",
"success": true
}
Kesimpulan
Pada artikel ini, kita semua telah belajar bagaimana cara membuat proses delete data di Go dengan Rest API. Jika teman-teman mengalami kendala, silahkan bisa bertanya melalui kolom komentar atau bisa juga melalui group Telegram SantriKoding.
SOURCE CODE : https://github.com/SantriKoding-com/Golang-Restful-API
Terima Kasih