REST API (Representational State Transfer Application Programming Interface) adalah salah satu arsitektur API yang paling populer di dunia pengembangan web modern. Hampir semua layanan yang kita gunakan sehari-hari — dari aplikasi cuaca hingga e-commerce — berkomunikasi melalui REST API.
Artikel ini akan membahas konsep REST API secara fundamental, metode HTTP, serta praktik terbaik dalam mendesain API yang baik.
1. Apa Itu REST API?
REST adalah gaya arsitektur yang diperkenalkan oleh Roy Fielding dalam disertasi doktoralnya pada tahun 2000. REST bukanlah protokol atau standar, melainkan seperangkat prinsip desain untuk membangun layanan web yang:
- Stateless — setiap request dari client ke server harus mengandung semua informasi yang diperlukan
- Cacheable — respons harus secara eksplisit memberi tahu apakah bisa di-cache
- Uniform Interface — konsistensi antarmuka antara client dan server
- Client-Server — pemisahan concern antara client dan server
REST API menggunakan protokol HTTP sebagai medium komunikasi. Data biasanya dikirim dalam format JSON (meskipun XML juga didukung).
2. Metode HTTP dalam REST API
REST API menggunakan metode HTTP untuk menentukan jenis operasi yang dilakukan terhadap resource:
| Metode | Fungsi | SQL Analog | Idempotent |
|---|---|---|---|
GET |
Membaca data | SELECT | ✅ Ya |
POST |
Membuat data baru | INSERT | ❌ Tidak |
PUT |
Mengganti data secara keseluruhan | UPDATE (full) | ✅ Ya |
PATCH |
Mengubah sebagian data | UPDATE (partial) | ❌ Tidak |
DELETE |
Menghapus data | DELETE | ✅ Ya |
Contoh Implementasi
# GET — Mendapatkan daftar user
GET /api/users
# GET — Mendapatkan user spesifik
GET /api/users/123
# POST — Membuat user baru
POST /api/users
Content-Type: application/json
{
"name": "Budi Santoso",
"email": "budi@example.com"
}
# PUT — Mengganti seluruh data user
PUT /api/users/123
Content-Type: application/json
{
"name": "Budi Santoso",
"email": "budi@example.com"
}
# PATCH — Mengubah email user saja
PATCH /api/users/123
Content-Type: application/json
{
"email": "budi.baru@example.com"
}
# DELETE — Menghapus user
DELETE /api/users/123
3. Status Code HTTP yang Umum
Menggunakan status code yang tepat sangat penting agar client bisa memahami hasil request:
2xx — Sukses
| Code | Makna | Kapan Digunakan | |——|——-|—————–| | 200 OK | Request berhasil | GET, PUT, PATCH | | 201 Created | Resource berhasil dibuat | POST | | 204 No Content | Berhasil, tidak ada konten | DELETE |
3xx — Redirection
| Code | Makna | |——|——-| | 301 Moved Permanently | Resource pindah permanen | | 304 Not Modified | Gunakan cache |
4xx — Client Error
| Code | Makna | Kapan Digunakan | |——|——-|—————–| | 400 Bad Request | Request tidak valid (validasi gagal) | | 401 Unauthorized | Belum login / token tidak valid | | 403 Forbidden | Tidak punya akses | | 404 Not Found | Resource tidak ditemukan | | 409 Conflict | Konflik data (misal: duplicate entry) | | 422 Unprocessable Entity | Data tidak bisa diproses |
5xx — Server Error
| Code | Makna | |——|——-| | 500 Internal Server Error | Error tidak terduga di server | | 502 Bad Gateway | Gateway/service upstream error | | 503 Service Unavailable | Server sedang sibuk/maintenance |
4. Best Practices Desain REST API
A. Gunakan Nama Resource Berbentuk Noun (Kata Benda)
✅ Benar:
GET /api/users → daftar user
GET /api/users/123 → satu user
POST /api/orders → buat pesanan
❌ Salah:
GET /api/getUsers
POST /api/createUser
DELETE /api/removeUserById
B. Gunakan Plural untuk Collection
GET /api/users ✅
GET /api/user ❌ (inkonsisten)
C. Filtering, Sorting, dan Pagination via Query Parameters
# Filtering
GET /api/users?role=admin&status=active
# Pagination
GET /api/users?page=2&limit=20
# Sorting
GET /api/users?sort=-created_at
# Field selection
GET /api/users?fields=id,name,email
D. Gunakan Nesting untuk Relasi Resource
GET /api/users/123/posts → postingan user 123
GET /api/users/123/posts/456 → postingan 456 milik user 123
Namun jangan membuat nesting terlalu dalam — maksimal 2-3 level.
E. Versioning API
Selalu gunakan versi pada API Anda untuk menghindari breaking change pada client lama:
GET /api/v1/users
GET /api/v2/users
F. Error Response yang Konsisten
Gunakan format error yang konsisten agar mudah diparsing oleh client:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Email sudah terdaftar",
"details": [
{
"field": "email",
"message": "Email sudah digunakan oleh akun lain"
}
]
}
}
5. Contoh Implementasi dengan Express.js
Berikut contoh sederhana REST API menggunakan Express.js:
const express = require('express');
const app = express();
app.use(express.json());
let users = [
{ id: 1, name: 'Budi', email: 'budi@example.com' }
];
// GET /api/users — Mendapatkan semua user
app.get('/api/users', (req, res) => {
res.json({ data: users });
});
// GET /api/users/:id — Mendapatkan user by ID
app.get('/api/users/:id', (req, res) => {
const user = users.find(u => u.id === parseInt(req.params.id));
if (!user) return res.status(404).json({ error: 'User not found' });
res.json({ data: user });
});
// POST /api/users — Membuat user baru
app.post('/api/users', (req, res) => {
const { name, email } = req.body;
if (!name || !email) {
return res.status(400).json({ error: 'Name dan email wajib diisi' });
}
const newUser = { id: users.length + 1, name, email };
users.push(newUser);
res.status(201).json({ data: newUser });
});
// PUT /api/users/:id — Update user
app.put('/api/users/:id', (req, res) => {
const user = users.find(u => u.id === parseInt(req.params.id));
if (!user) return res.status(404).json({ error: 'User not found' });
user.name = req.body.name || user.name;
user.email = req.body.email || user.email;
res.json({ data: user });
});
// DELETE /api/users/:id — Hapus user
app.delete('/api/users/:id', (req, res) => {
users = users.filter(u => u.id !== parseInt(req.params.id));
res.status(204).send();
});
app.listen(3000, () => console.log('API running on port 3000'));
Kesimpulan
REST API tetap menjadi pilihan utama untuk membangun layanan web karena kesederhanaan, skalabilitas, dan kemudahan integrasinya. Dengan mengikuti prinsip-prinsip dasar seperti penggunaan HTTP method yang tepat, naming convention yang konsisten, dan error handling yang informatif, Anda dapat membangun API yang mudah digunakan oleh pengembang lain.
Mulailah project Anda dengan mendesain endpoint API di atas kertas terlebih dahulu — ini akan menghemat banyak waktu revisi di kemudian hari.
Kiki/🎮🍉⌨️🍩💻
Cara Deploy Jekyll ke GitHub Pages: Gratis dan Otomatis