Fundamental

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 #

KebutuhanPilihan
Public APIREST
Flexible frontend queryGraphQL
Internal microservicesgRPC
Simple internal callJSON-RPC
Fullstack TypeScripttRPC

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.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact