API (Application Programming Interface) adalah cara satu program meminta sesuatu ke program lain, lewat aturan yang sudah disepakati: apa saja yang boleh diminta, dan seperti apa jawabannya. Bayangin makan di restoran. Kamu gak masuk dapur. Kamu baca menu, bilang pesananmu ke pelayan, pelayan membawanya ke dapur, lalu balik membawa makanan. Kamu adalah client, dapur adalah server, menu dan pelayannya adalah API. Yang gak ada di menu gak bisa dipesan.
🧪 Tebakan cepat: aplikasi Toko Buku meminta buku nomor 99, padahal bukunya gak ada. Server-nya crash, diam saja, atau tetap menjawab? Tebak dulu, jawabannya ada di bagian "Request dan response".
Client, server, dan API
Sepanjang track ini kita pakai satu contoh yang terus tumbuh: API Toko Buku di https://api.tokobuku.test (akhiran .test memang khusus untuk contoh, gak ada di internet). Isinya dua jenis data: buku (books) dan penulis (authors).
- Client: program yang meminta. Website Toko Buku, aplikasi HP-nya, bahkan server lain.
- Server: program yang menjawab. Dia yang memegang database.
- API: daftar permintaan yang boleh diajukan client ke server, plus bentuk jawabannya. Interface artinya titik temu: client cukup tahu API-nya, gak perlu tahu isi dapurnya.
Menu API Toko Buku untuk awal:
| Permintaan | Jawabannya |
|---|---|
GET /books |
daftar semua buku |
GET /books/1 |
satu buku, nomor 1 |
GET /authors |
daftar semua penulis |
Website dan aplikasi HP-nya gak punya database sendiri-sendiri. Dua-duanya meminta ke API yang sama, jadi datanya selalu sama.
Request dan response
Client dan server ngobrol pakai HTTP, protokol (aturan main) yang dipakai web untuk mengirim permintaan dan jawaban. Satu permintaan disebut request, jawabannya disebut response.
Aplikasi meminta buku nomor 1:
GET /books/1 HTTP/1.1
Host: api.tokobuku.test
Accept: application/json
Server menjawab:
HTTP/1.1 200 OK
Content-Type: application/json
{"id": 1, "title": "Laskar Pelangi", "author_id": 1, "price": 89000, "stock": 12}
GETadalah method, kata kerjanya: "ambil"./books/1adalah path, alamat data yang diminta.HostdanAcceptadalah header, keterangan tambahan.Accept: application/jsonartinya "tolong jawab dalam JSON".200 OKadalah status code, tiga angka yang bilang hasilnya. 200 artinya berhasil.- Baris paling bawah adalah body, isi jawabannya, dalam format JSON (dibahas di pelajaran Format JSON).
Sekarang buku nomor 99, yang gak ada:
HTTP/1.1 404 Not Found
Content-Type: application/json
{"error": "Book not found"}
Server gak crash dan gak diam. Dia tetap menjawab, dengan status 404 Not Found dan body yang menjelaskan masalahnya. Itu jawaban tebakannya. Client membaca status code-nya dulu, baru memutuskan mau menampilkan buku atau pesan "buku gak ketemu".
Minta sesuatu yang gak ada di menu juga tetap dijawab. API Toko Buku di awal cuma bisa dibaca, jadi DELETE /books/1 dijawab 405 Method Not Allowed plus header Allow: GET, daftar method yang boleh di alamat itu.
REST: alamat untuk benda, method untuk aksi
REST adalah gaya mendesain API di atas HTTP yang paling banyak dipakai. Dua aturan pokoknya:
- Tiap benda (disebut resource) punya alamat sendiri, ditulis sebagai kata benda:
/books,/books/1,/authors. - Aksinya dipilih lewat method:
GETmembaca,POSTmembuat,PUTatauPATCHmengubah,DELETEmenghapus.
Jadi URL gak perlu berisi kata kerja. Bandingkan:
| Kurang tepat | Gaya REST |
|---|---|
POST /api/hapusSiswa |
DELETE /api/siswa/5 |
GET /getBooks |
GET /books |
POST /api/hapusSiswa salah dua kali: ada kata kerja (hapus) di URL, dan method-nya POST, padahal aksinya menghapus. Method-nya yang harus bilang "hapus", URL-nya cukup menunjuk siswa yang mana.
Endpoint pertamamu
Latihan di pelajaran ini sudah berisi kodenya. Editornya memakai app kecil bergaya Express (library server Node.js yang paling populer), dan pelajaran-pelajaran berikutnya memakai app yang sama:
app.get("/api/status", (req, res) => {
res.json({ status: "ok", message: "API berjalan!" });
});
app.get("/api/status", ...)mendaftarkan satu endpoint: kalau datang requestGETke path/api/status, jalankan function di sebelahnya.req(request) berisi apa yang dikirim client.res(response) dipakai untuk menjawab.res.json({...})mengirim object itu sebagai JSON, lengkap dengan headerContent-Type: application/json. Kalau gak disebut lain, status-nya200.
Waktu kamu klik Jalankan, tester mengirim GET /api/status ke kodemu dan mengecek jawabannya 200.
⚠️ Jebakan yang sering ketemu
- Mengira client membaca database. Client cuma dapat apa yang dikirim API. Database Toko Buku punya kolom harga modal, tapi API gak pernah mengirimnya. API yang menentukan apa yang dibagikan.
- Kata kerja di URL.
/getBooks,/api/hapusSiswa,/createUser. Method sudah bilang aksinya, URL cukup kata benda. - Menjawab semua dengan 200.
200 OKdengan body{"error": "..."}bikin client mengira semuanya berhasil. Kalau gagal, pakai status yang sesuai, misalnya404. - Mengubah API seenaknya. API itu janji ke semua client. Ganti nama
titlejadijudul, dan website plus aplikasi HP yang membacatitlelangsung rusak.
TL;DR: API (Application Programming Interface) adalah daftar permintaan yang boleh diajukan client ke server, plus bentuk jawabannya. Client mengirim request (method, path, header, body) lewat HTTP, server membalas response (status code, header, body). Data yang gak ada tetap dijawab, dengan 404 Not Found; aksi yang gak ada di menu dijawab 405. REST: tiap resource punya alamat berupa kata benda (/books/1), aksinya dipilih lewat method (GET, POST, PUT/PATCH, DELETE), jadi gak ada kata kerja di URL. Di latihan, app.get(path, (req, res) => res.json(...)) mendaftarkan endpoint yang menjawab JSON dengan status 200.