Fundamental #
API (Application Programming Interface) adalah fondasi utama dalam pengembangan software modern. Hampir semua sistem hari ini—mobile app, web app, microservices, integrasi third-party—berkomunikasi melalui API. Namun, banyak engineer menggunakan API tanpa benar-benar memahami fundamental, sejarah, alasan kemunculannya, serta kapan harus memilih jenis API tertentu.
Untuk menyamakan persepsi, berikut gambaran sederhana cara kerja API secara konseptual:
[ Client / Consumer ]
|
| Request (HTTP / RPC / Query)
v
+--------------------+
| API |
| (Contract Layer) |
+--------------------+
|
| Call / Query / Command
v
+--------------------+
| Business Logic |
| (Service / Domain) |
+--------------------+
|
| Read / Write
v
+--------------------+
| Data Source |
| (DB / Cache / MQ) |
+--------------------+
^
| Response (Data / Error)
+--------------------------
Diagram di atas menekankan satu hal penting:
- Client tidak berinteraksi langsung dengan business logic atau database
- API bertindak sebagai boundary dan contract
Artikel ini membahas API dari nol:
- sejarah singkat API,
- fundamental konsep API,
- jenis-jenis API beserta kenapa ada dan kapan digunakan,
- serta best practice penggunaan masing-masing pendekatan.
Apa Itu API? #
Secara sederhana, API adalah kontrak komunikasi antar sistem.
API mendefinisikan:
- apa yang bisa diakses,
- bagaimana cara mengaksesnya,
- format data yang dikirim dan diterima,
- serta aturan (constraint) dalam interaksi.
API bukan implementasi, melainkan interface. Implementasi boleh berubah, kontraknya tidak (atau seminimal mungkin).
Sejarah Singkat API #
Era Awal: Library & Function Call (1960–1980) #
- API awalnya berupa function call dalam satu sistem
- Digunakan untuk memisahkan logic internal
- Contoh: standard library di C
Masalah: hanya bekerja dalam satu environment
Era Distributed System & RPC (1980–1990) #
- Muncul kebutuhan komunikasi antar mesin
- Lahir RPC (Remote Procedure Call)
- Contoh: CORBA, DCOM
Masalah:
- tightly coupled
- kompleks
- sulit di-debug
Era Web & HTTP API (2000–sekarang) #
- HTTP menjadi standar komunikasi
- API menjadi stateless
- Lahir REST
Dampak besar:
- interoperabilitas tinggi
- mudah diadopsi
- web-scale
Era Modern: Mobile, Microservices & Realtime (2010–sekarang) #
- Kebutuhan efisiensi, fleksibilitas, dan performa
- Muncul GraphQL, gRPC, JSON-RPC, tRPC
Fundamental Konsep API #
Contract First #
API adalah perjanjian antara consumer dan provider.
Perubahan API tanpa versioning = breaking trust.
Abstraction #
API menyembunyikan:
- detail database
- detail business logic
- perubahan internal
Consumer tidak peduli bagaimana, hanya apa.
Consistency #
API yang baik:
- konsisten secara naming
- konsisten secara behavior
- konsisten secara error
Backward Compatibility #
API yang matang berusaha tidak merusak client lama.
Explicit Over Implicit #
Lebih baik verbose tapi jelas daripada ambigu.
Klasifikasi API Secara Umum #
Berdasarkan Akses #
- Public API (Open API)
- Partner API
- Private / Internal API
Berdasarkan Gaya Komunikasi #
- Resource-based
- Query-based
- Procedure-based
- Contract-based
Jenis-Jenis Implementasi API #
REST #
Sejarah Singkat #
- Diperkenalkan oleh Roy Fielding (2000)
- Dibangun di atas HTTP
Kenapa Ada? #
- Menyederhanakan distributed system
- Memanfaatkan HTTP semantics
Karakteristik #
- Stateless
- Resource-oriented
- Menggunakan HTTP verb
Biasanya Digunakan Di #
- Web backend
- Mobile backend
- Public API
Kelebihan #
- Mudah dipahami
- Tooling matang
- Cache-friendly
Kekurangan #
- Over/Under fetching
- Tidak ideal untuk kompleks query
Best Practice #
- Gunakan noun untuk resource
- HTTP status code harus tepat
- Versioning eksplisit
- Jangan bocorkan detail internal
GraphQL #
Sejarah Singkat #
- Dikembangkan Facebook (2012)
- Open-source (2015)
Kenapa Ada? #
- Mengatasi over-fetching REST
- Memberikan fleksibilitas ke client
Karakteristik #
- Single endpoint
- Query-driven
- Strongly typed schema
Biasanya Digunakan Di #
- Frontend-heavy application
- Mobile app dengan bandwidth terbatas
Kelebihan #
- Client menentukan data
- Evolusi API lebih aman
Kekurangan #
- Complexity di server
- Caching lebih sulit
Best Practice #
- Batasi query complexity
- Gunakan persisted query
- Pisahkan schema publik & internal
gRPC #
Sejarah Singkat #
- Dikembangkan Google
- Berdasarkan HTTP/2 & Protobuf
Kenapa Ada? #
- Performa tinggi
- Komunikasi service-to-service
Karakteristik #
- Binary protocol
- Contract-first
- Streaming support
Biasanya Digunakan Di #
- Microservices
- Internal backend
- High-throughput system
Kelebihan #
- Sangat cepat
- Schema kuat
Kekurangan #
- Tidak human-readable
- Kurang cocok untuk public API
Best Practice #
- Gunakan untuk internal service
- Jaga backward compatibility protobuf
- Hindari expose langsung ke frontend
JSON-RPC #
Sejarah Singkat #
- Evolusi RPC klasik
- Berbasis JSON
Kenapa Ada? #
- Simpel
- Procedure-based API
Karakteristik #
- Method call
- Tidak resource-based
Biasanya Digunakan Di #
- Internal tool
- Legacy system
Kelebihan #
- Mudah diimplementasi
Kekurangan #
- Tidak RESTful
- Minim HTTP semantics
Best Practice #
- Gunakan hanya untuk internal
- Dokumentasi harus jelas
tRPC #
Sejarah Singkat #
- Muncul dari ekosistem TypeScript
Kenapa Ada? #
- Menghilangkan API schema duplication
- End-to-end type safety
Karakteristik #
- Type inference
- No manual schema
Biasanya Digunakan Di #
- Fullstack TypeScript app
- Monorepo
Kelebihan #
- Developer experience tinggi
Kekurangan #
- Vendor lock-in
- Tidak language-agnostic
Best Practice #
- Gunakan untuk internal app
- Hindari expose sebagai public API
Ringkasan Kapan Menggunakan Apa #
| Kebutuhan | Pilihan |
|---|---|
| Public API | REST |
| Flexible frontend query | GraphQL |
| Internal microservices | gRPC |
| Simple internal call | JSON-RPC |
| Fullstack TypeScript | tRPC |
Penutup #
API bukan sekadar endpoint. API adalah kontrak, boundary, dan fondasi arsitektur sistem. Memahami sejarah dan fundamental API membantu kita:
- tidak salah memilih teknologi
- tidak over-engineering
- membangun sistem yang scalable dan sustainable
API yang baik bukan yang paling canggih, tapi yang tepat guna, konsisten, dan bisa bertahan lama.