6. What is REST API?
REST API adalah Representational State Transfer Application Programming
Interface yaitu standar arsitektur komunikasi untuk sistem yang terhubung melalui
jaringan, seperti internet. REST API menggunakan protokol HTTP (Hypertext
Transfer Protocol) untuk mengirimkan permintaan dan menerima respons, dan
menggunakan format data seperti JSON atau XML untuk menyampaikan data.
Di Golang, pengembangan REST API dapat dilakukan dengan menggunakan
framework seperti Gin, Echo, atau net/http yang sudah tersedia dalam bahasa
tersebut. Framework ini dapat digunakan untuk membuat endpoint dan
menangani permintaan HTTP seperti GET, POST, PUT, dan DELETE.
7. GET, POST, PUT, DELETE?
GET, POST, PUT, dan DELETE adalah metode atau tipe permintaan yang digunakan dalam protokol
HTTP (Hypertext Transfer Protocol). Masing-masing metode memiliki tujuan dan sifat yang berbeda:
● GET: digunakan untuk mengambil data dari server. Permintaan ini tidak mengubah data di server
dan dapat dilakukan berulang-ulang tanpa efek negatif.
● POST: digunakan untuk mengirimkan data baru ke server. Permintaan ini biasanya digunakan
untuk menambahkan data baru, seperti membuat akun baru atau menambahkan produk baru ke
toko online.
● PUT: digunakan untuk mengupdate data yang sudah ada di server. Permintaan ini biasanya
digunakan untuk mengubah data yang sudah ada, seperti mengubah nama akun atau mengubah
harga produk.
● DELETE: digunakan untuk menghapus data dari server. Permintaan ini biasanya digunakan untuk
menghapus data yang sudah tidak diperlukan lagi, seperti menghapus akun atau produk yang
sudah tidak dijual lagi.
Semua metode ini dapat digunakan dalam pengembangan REST API untuk menangani permintaan dari
client dan melakukan operasi yang sesuai pada server.
8. Response Status Server
Setiap metode permintaan HTTP (GET, POST, PUT, dan DELETE) akan menghasilkan respons
dari server yang berbeda-beda. Beberapa respons yang umum diterima dari masing-masing
metode adalah sebagai berikut:
● GET: Respons dari permintaan GET biasanya berupa data yang diminta dalam format
seperti JSON atau XML. Jika permintaan berhasil, server akan mengirimkan status HTTP
200 (OK) dan data yang diminta. Jika permintaan tidak valid, server akan mengirimkan
status HTTP 400 (Bad Request) atau 404 (Not Found) sesuai kondisi.
● POST: Respons dari permintaan POST biasanya berupa konfirmasi bahwa data yang
diterima telah disimpan dengan baik. Jika permintaan berhasil, server akan mengirimkan
status HTTP 201 (Created) dan informasi lain seperti ID dari data yang baru saja
ditambahkan. Jika permintaan tidak valid, server akan mengirimkan status HTTP 400 (Bad
Request) atau 422 (Unprocessable Entity) sesuai kondisi.
9. Response Status Server
● PUT: Respons dari permintaan PUT biasanya berupa konfirmasi bahwa data yang diterima
telah diperbarui dengan baik. Jika permintaan berhasil, server akan mengirimkan status
HTTP 200 (OK) atau 204 (No Content) dan informasi lain seperti ID dari data yang baru
saja diperbarui. Jika permintaan tidak valid, server akan mengirimkan status HTTP 400 (Bad
Request) atau 404 (Not Found) sesuai kondisi.
● DELETE: Respons dari permintaan DELETE biasanya berupa konfirmasi bahwa data yang
diminta telah dihapus. Jika permintaan berhasil, server akan mengirimkan status HTTP 200
(OK) atau 204 (No Content) dan informasi lain seperti ID dari data yang dihapus. Jika
permintaan tidak valid, server akan mengirimkan status HTTP 400 (Bad Request) atau 404
(Not Found) sesuai kondisi.
Perlu diingat bahwa respons yang diterima dari server dapat berbeda sesuai dengan
implementasi dan logika aplikasi yang digunakan.
11. Tools REST API
Untuk membuat REST API di Golang, beberapa tools yang diperlukan antara lain:
● Golang: Bahasa pemrograman yang digunakan untuk menulis kode aplikasi.
● Text editor atau IDE: Sebuah text editor atau IDE seperti Visual Studio Code, GoLand, atau
Sublime Text digunakan untuk menulis dan mengedit kode aplikasi.
● Postman: digunakan untuk melakukan testing pada endpoint yang dibuat.
● Framework: Framework seperti Gin, Echo, atau net/http digunakan untuk membuat
endpoint dan menangani permintaan HTTP.
● Database: Sebuah database seperti MySQL, PostgreSQL, atau MongoDB digunakan untuk
menyimpan data aplikasi.
● ORM (Object-Relational Mapping) atau ODM (Object-Document Mapping): Sebuah
library seperti Gorm, digunakan untuk mengkoneksikan aplikasi ke database dan melakukan
operasi CRUD (Create, Read, Update, Delete) pada data.
13. Framework Go
Framework Go adalah sebuah kumpulan modul dan library yang disediakan untuk membantu developer
dalam pengembangan aplikasi dengan menyediakan fitur-fitur yang sudah terintegrasi dan dapat
digunakan sebagai acuan dalam pengembangan aplikasi.
Framework Go dapat digunakan dalam pembuatan REST API untuk membantu developer dalam
menangani permintaan HTTP dan menyediakan fitur-fitur yang dibutuhkan untuk pengembangan REST
API. Beberapa framework Go yang populer digunakan untuk pembuatan REST API adalah:
● Gin: Framework web yang ringan dan cepat yang menyediakan fitur routing, middleware, dan
templating yang dibutuhkan untuk pengembangan REST API.
● Echo: Framework web yang menyediakan fitur routing, middleware, dan templating yang
dibutuhkan untuk pengembangan REST API dengan performa yang baik.
● net/http: Package bawaan Go yang digunakan untuk menangani permintaan HTTP dan
menyediakan fitur yang dibutuhkan untuk pengembangan REST API.
Selain itu, ada juga library HTTP Router seperti Gorilla Mux, Chi, atau httpRouter yang dapat digunakan
untuk menangani routing pada REST API. Perlu diingat bahwa pemilihan framework atau library yang
digunakan akan tergantung pada kebutuhan dan preferensi developer.
14. Framework Gin
Gin adalah sebuah framework web yang digunakan dalam pengembangan aplikasi web dengan Go. Gin dikenal
dengan performa yang cepat dan fitur-fitur yang dibutuhkan dalam pembuatan REST API.
Beberapa fitur yang ditawarkan oleh Gin antara lain:
● Routing: memungkinkan developer untuk menangani permintaan HTTP dengan menentukan endpoint
yang sesuai.
● Middleware: memungkinkan developer untuk menambahkan logika sebelum atau sesudah operasi
CRUD.
● Grouping: memungkinkan developer untuk mengelompokkan endpoint yang berhubungan.
● Context: memungkinkan developer untuk menyimpan data yang dibutuhkan oleh endpoint.
Dalam pembuatan REST API, Gin dapat digunakan untuk membuat endpoint yang dibutuhkan, menangani
permintaan HTTP, dan menambahkan logika yang diperlukan dengan menggunakan middleware. Gin juga dapat
digunakan dengan ORM seperti Gorm untuk memudahkan dalam melakukan operasi CRUD pada data.
Gin sendiri sangat populer digunakan dalam pengembangan REST API dikarenakan performa yang cepat dan
fitur-fitur yang ditawarkan, namun perlu diingat bahwa pemilihan framework akan tergantung pada kebutuhan
dan preferensi developer.
15. Database
Database adalah komponen penting dalam pengembangan REST API, digunakan untuk menyimpan,
mengambil, dan memodifikasi data yang dibutuhkan oleh aplikasi. Beberapa database yang populer digunakan
dalam pengembangan REST API dengan Go adalah:
● MySQL: Database relasional yang populer dan digunakan dalam berbagai jenis aplikasi. Dapat digunakan
dengan Go melalui library seperti go-sql-driver atau gorm.
● PostgreSQL: Database relasional yang digunakan dalam aplikasi yang memerlukan kinerja yang baik dan
fitur-fitur yang canggih. Dapat digunakan dengan Go melalui library seperti pq atau gorm.
● MongoDB: Database NoSQL yang digunakan dalam aplikasi yang menangani data non-relasional. Dapat
digunakan dengan Go melalui library seperti mgo atau mongodb-go-driver
● SQLite: Database relasional yang digunakan untuk pengembangan aplikasi yang memerlukan portabilitas
tinggi. Dapat digunakan dengan Go melalui library seperti go-sqlite3
● Redis: Database key-value yang digunakan dalam aplikasi yang memerlukan kinerja yang baik dan fitur-
fitur caching. Dapat digunakan dengan Go melalui library seperti redigo atau go-redis
Perlu diingat bahwa pemilihan database yang digunakan dalam pengembangan REST API akan tergantung
pada kebutuhan dan karakteristik data yang akan ditangani oleh aplikasi. Beberapa faktor yang perlu
dipertimbangkan dalam memilih database yang sesuai untuk aplikasi REST API adalah skala aplikasi, kinerja,
keamanan, dan fitur yang dibutuhkan.
16. Library GORM
Gorm (Golang ORM) adalah sebuah library ORM (Object-Relational Mapping) yang digunakan untuk
mengkoneksikan aplikasi Go ke database dan melakukan operasi CRUD (Create, Read, Update, Delete) pada
data. Gorm dapat digunakan dengan berbagai jenis database seperti MySQL, PostgreSQL, SQLite, dan lainnya.
Dalam pembuatan REST API, Gorm dapat digunakan untuk memudahkan dalam melakukan operasi CRUD
pada data yang digunakan oleh aplikasi. Dengan Gorm, developer dapat menulis kode Go yang lebih sederhana
dan terstruktur untuk melakukan operasi pada data, sehingga memudahkan dalam pengembangan aplikasi.
Beberapa fitur yang ditawarkan oleh Gorm antara lain:
● Auto migration: memungkinkan developer untuk meng-generate tabel dari struct Go Association :
memungkinkan developer untuk mengatur relasi antar tabel dalam database.
● Callback: memungkinkan developer untuk menambahkan logika sebelum atau sesudah operasi CRUD.
● Preloading: memungkinkan developer untuk mengambil data dari beberapa tabel dalam satu query.
Perlu diingat bahwa Gorm akan menambahkan overhead pada aplikasi karena harus melakukan mapping data
dari tabel ke struct, sehingga developer harus mempertimbangkan kebutuhan dan karakteristik aplikasi yang
akan dikembangkan.
17. Library Godotenv
Godotenv adalah sebuah library Golang yang digunakan untuk membaca file .env (environment)
pada aplikasi. File .env digunakan untuk menyimpan variabel-variabel environment seperti nama
user, password, host, port, dll. yang digunakan dalam aplikasi.
Dengan menggunakan Godotenv, kita dapat membaca nilai dari variabel-variabel tersebut pada
saat aplikasi dijalankan, sehingga kita tidak perlu mengubah kode aplikasi setiap kali ada
perubahan pada variabel-variabel tersebut.
Dengan menggunakan Godotenv, kita dapat membuat aplikasi yang dapat di-deploy dengan
mudah dan aman, karena tidak perlu menyimpan informasi sensitif dalam kode aplikasi.
19. Structure Package/File Go
Struktur folder dalam pembuatan REST API dengan Go dapat berbeda-beda tergantung pada kebutuhan
dan preferensi developer. Namun, ada beberapa konvensi yang umum digunakan dalam pengembangan
aplikasi Go, yaitu:
● main package: package ini berisi file main yang akan dijalankan saat aplikasi di-run.
● config package: package ini berisi file-file yang digunakan untuk mengkonfigurasi aplikasi, seperti
koneksi ke database, pengaturan environment, dll.
● models package: package ini berisi struct yang digunakan sebagai model dari data yang
digunakan dalam aplikasi.
● routes package: package ini berisi file yang digunakan untuk mengatur routing dari aplikasi.
● controllers package: package ini berisi file yang digunakan untuk menangani permintaan dari
client dan melakukan operasi CRUD pada data.
Struktur folder ini dapat digunakan sebagai acuan dalam pengembangan REST API dengan Go, namun
perlu diingat bahwa struktur folder dapat berbeda-beda tergantung pada kebutuhan dan preferensi
developer.
21. Installation Framework & Library
● Go mod
○ go mod init <namefolder>
● Gin
○ go get -u github.com/gin-gonic/gin
● GORM
○ go get -u gorm.io/gorm
○ go get -u gorm.io/driver/mysql
● Godotenv
○ go get github.com/joho/godotenv
23. config/db.go
Pada package config, file db.go digunakan untuk mengatur koneksi
ke database. Koneksi ke database dibuat dengan menggunakan
Gorm MySQL. Konfigurasi koneksi seperti nama user, password,
host, port, dan nama database diambil dari environment variable.
24. models/people.go
Pada package models, file people.go digunakan untuk
mendefinisikan struct People yang akan digunakan sebagai
model data dalam aplikasi. Struktur People mengandung field-
field yang dibutuhkan dalam aplikasi, seperti name, email,
university, hobbies, dan portfolio. Gorm.Model digunakan untuk
menambahkan field-field default seperti ID, created_at,
updated_at, dan deleted_at.
26. controllers/people.go
Pada package controllers, file people.go digunakan untuk mengatur logika dari aplikasi. Fungsi-fungsi
yang ada di sini digunakan untuk menangani request dari routes yang didefinisikan sebelumnya dan
mengatur respon yang dikirim ke client. Itulah contoh codingan REST API sederhana menggunakan
Gorm dan Gin dengan struktur folder yang telah dijelaskan sebelumnya. Perlu diingat bahwa ini hanyalah
sebuah contoh sederhana dan dalam pengembangan aplikasi yang sesungguhnya perlu
diimplementasikan fitur-fitur yang dibutuhkan sesuai dengan kebutuhan aplikasi, seperti validasi, logging,
dll.
27. routes/people.go
Pada package routes, file people.go digunakan untuk mengatur
routing dari aplikasi. Routing didefinisikan dengan menggunakan
Gin dan mengarahkan request ke controller yang sesuai. Pada
contoh ini, route '/peoples’ digunakan untuk mengatur routing dari
endpoint user.
28. main.go
Pada package main, file main.go akan dijalankan ketika aplikasi di run.
Koneksi ke database dibuat dan di-handle dengan package config dan
migrasi tabel dilakukan dengan Gorm. Kemudian router dari Gin
dikonfigurasi dan dijalankan pada port 3000.