Minggu 07 — Backend, Database, dan API
HTTP, REST API, CRUD, SQL, relasi tabel, dan autentikasi vs otorisasi.
Cara web berkomunikasi: HTTP
Browser (klien) mengirim request, server membalas response. Request punya method, URL, dan kadang body. Response punya status code dan body (biasanya JSON).
| Method | Arti | Contoh |
|---|---|---|
| GET | Ambil data | GET /api/courses |
| POST | Buat data baru | POST /api/courses |
| PUT / PATCH | Ubah data | PUT /api/courses/5 |
| DELETE | Hapus data | DELETE /api/courses/5 |
| Status | Arti |
|---|---|
| 200 / 201 | Berhasil / berhasil dibuat |
| 400 / 422 | Input salah / gagal validasi |
| 401 / 403 | Belum login / tidak berhak |
| 404 | Tidak ditemukan |
| 500 | Kesalahan di server |
REST API dan CRUD
REST memakai URL sebagai "benda" (/courses) dan method sebagai "aksi". Empat operasi CRUD: Create (POST), Read (GET), Update (PUT), Delete (DELETE). Selalu validasi input di server, walau frontend sudah memvalidasi.
SQL dan relasi tabel
CREATE TABLE courses (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
price INT NOT NULL CHECK (price >= 0)
);
CREATE TABLE lessons (
id SERIAL PRIMARY KEY,
course_id INT NOT NULL REFERENCES courses(id) ON DELETE CASCADE,
title VARCHAR(100) NOT NULL
);
SELECT c.title, COUNT(l.id) AS jumlah_bab
FROM courses c LEFT JOIN lessons l ON l.course_id = c.id
GROUP BY c.title;
- Relasi satu-ke-banyak: satu kursus punya banyak bab (kunci asing
course_id). - Migration: file yang mencatat perubahan skema database, bisa dijalankan berulang dan dibagi ke tim.
- Index: mempercepat pencarian pada kolom yang sering dicari (
CREATE INDEX ... ON courses(title)).
Authentication vs Authorization
| Pertanyaan | Contoh | |
|---|---|---|
| Authentication | Siapa kamu? | Login dengan email dan sandi |
| Authorization | Apa yang boleh kamu lakukan? | Hanya admin yang boleh menghapus kursus |
Sandi harus disimpan sebagai hash, tidak pernah sebagai teks biasa.
Praktik minggu ini
Bangun API manajemen kursus menggunakan Laravel atau Go dan PostgreSQL. Target: API CRUD yang berjalan dan bisa diuji (misalnya dengan Postman atau curl).