Konsep REST
REST (Representational State Transfer) adalah arsitektur komunikasi berbasis HTTP yang digunakan untuk membangun API (Application Programming Interface). REST memungkinkan client (frontend) dan server (backend) berkomunikasi secara stateless menggunakan standar web seperti HTTP methods, URL, dan format data seperti JSON.
Karakteristik REST
- Stateless (server tidak menyimpan state client)
- Client-Server (pemisahan frontend dan backend)
- Cacheable (response dapat di-cache)
- Uniform Interface (standar komunikasi yang konsisten)
- Layered System (arsitektur berlapis)
HTTP Methods dalam REST
- GET (mengambil data)
- POST (membuat data baru)
- PUT (update seluruh data)
- PATCH (update sebagian data)
- DELETE (menghapus data)
Contoh Endpoint REST
// GET semua user
GET /api/users
// GET user by id
GET /api/users/1
// POST create user
POST /api/users
// PUT update user
PUT /api/users/1
// DELETE user
DELETE /api/users/1
Struktur Response JSON
REST API biasanya menggunakan JSON sebagai format response karena ringan dan mudah diproses oleh berbagai bahasa pemrograman.
{
"status": "success",
"data": {
"id": 1,
"name": "Rama"
}
}
Status Code HTTP
- 200 OK (request berhasil)
- 201 Created (data berhasil dibuat)
- 400 Bad Request (request tidak valid)
- 401 Unauthorized (tidak punya akses)
- 404 Not Found (data tidak ditemukan)
- 500 Internal Server Error (error di server)
Contoh Implementasi Sederhana (Golang)
package main
import (
"encoding/json"
"net/http"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
}
func getUser(w http.ResponseWriter, r *http.Request) {
user := User{ID: 1, Name: "Rama"}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(user)
}
func main() {
http.HandleFunc("/api/user", getUser)
http.ListenAndServe(":8080", nil)
}
Best Practice REST API
- Gunakan naming endpoint yang konsisten (/users, bukan /getUsers)
- Gunakan HTTP method sesuai fungsi
- Gunakan status code yang tepat
- Pisahkan logic controller dan service
- Gunakan pagination untuk data besar
- Gunakan versioning API (/api/v1/...)
Kelebihan REST
- Mudah dipahami dan digunakan
- Berbasis standar HTTP
- Fleksibel dan scalable
- Didukung hampir semua platform
- Ringan (biasanya JSON)
Kekurangan REST
- Over-fetching atau under-fetching data
- Tidak cocok untuk real-time tanpa tambahan teknologi
- Bisa kompleks jika endpoint terlalu banyak
- Tidak sefleksibel GraphQL untuk query kompleks
Kesimpulan
REST adalah standar de facto dalam membangun API modern karena kesederhanaan dan fleksibilitasnya. Dengan memahami konsep REST, developer dapat membangun sistem backend yang scalable, mudah diintegrasikan, dan maintainable.