API Gateway #
Dalam arsitektur komputasi awan modern yang menerapkan pola microservices dan serverless, API bertindak sebagai pintu masuk utama yang menghubungkan dunia luar (klien seperti aplikasi web, mobile, atau perangkat IoT) dengan layanan backend kita. Mengelola API secara mandiri di server tradisional membutuhkan usaha keras: kita harus menangani konfigurasi reverse proxy (seperti Nginx), mengelola sertifikat SSL, menerapkan aturan pembatasan akses (rate limiting), serta menangani autentikasi pengguna secara manual.
Di dalam ekosistem AWS, AWS API Gateway hadir sebagai platform manajemen API berbasis serverless yang dikelola penuh (fully managed). Layanan ini membebaskan kita dari seluruh beban operasional infrastruktur tersebut. API Gateway mampu mengelola, mengamankan, menskalakan, dan memantau ribuan panggilan API secara bersamaan secara otomatis. Artikel ini akan membedah secara mendalam tipe-tipe API di API Gateway, mekanisme pengamanan, integrasi asinkron, hingga contoh kode implementasi nyata.
Jenis-Jenis API di AWS API Gateway #
AWS API Gateway menyediakan tiga jenis API utama yang dioptimalkan untuk kebutuhan performa, fitur, dan anggaran yang berbeda.
1. HTTP API (Rekomendasi Utama) #
HTTP API dirancang khusus untuk membangun API yang berkinerja tinggi, memiliki latensi sangat rendah, dan berbiaya murah. Layanan ini adalah versi minimalis yang dioptimalkan untuk integrasi langsung dengan fungsi Lambda atau Application Load Balancer (ALB).
- Keunggulan: Biaya hingga 70% lebih murah dibandingkan tipe REST API tradisional, latensi pemrosesan internal jauh lebih rendah, dan mendukung integrasi OIDC/OAuth2 secara native.
- Keterbatasan: Tidak mendukung fitur-fitur kompleks seperti API Keys bawaan, Usage Plans, caching bawaan, atau transformasi request/response tingkat lanjut.
- Use Case Terbaik: RESTful API standar untuk backend web/mobile modern, integrasi mikro-servis asinkron.
2. REST API #
REST API adalah versi klasik yang kaya akan fitur manipulasi request/response dan pengelolaan konsumen API di tingkat enterprise.
- Keunggulan: Menyediakan fitur manajemen lengkap seperti pembuatan API Keys, pembatasan kuota (Usage Plans), caching response di tingkat CDN, perlindungan WAF (Web Application Firewall), serta transformasi XML-to-JSON bawaan menggunakan Apache Velocity Templates.
- Keterbatasan: Latensi pemrosesan sedikit lebih tinggi dan biaya transfer data serta invokasi lebih mahal.
- Use Case Terbaik: API publik berbayar (SaaS) yang membutuhkan monetisasi berbasis kuota, API legacy yang membutuhkan transformasi data di tingkat gateway.
3. WebSocket API #
WebSocket API digunakan untuk membangun aplikasi komunikasi dua arah (bidirectional) yang bersifat stateful dan real-time.
- Keunggulan: API Gateway mengelola koneksi TCP persisten dengan klien di tingkat gateway secara serverless. Fungsi Lambda backend hanya dipanggil ketika ada pesan yang dikirimkan atau koneksi ditutup, sehingga menghemat biaya.
- Use Case Terbaik: Aplikasi obrolan (chat), notifikasi instan real-time, dashboard pemantauan langsung, dan game online.
Alur Routing dan Keamanan API Gateway #
API Gateway bertindak sebagai pintu gerbang pengaman pertama sebelum request dari klien menyentuh kode backend kita.
flowchart TD
Client["Klien (Web/Mobile)"] -->|1. Request dengan Bearer Token| APIGW["Amazon API Gateway"]
subgraph Auth["Proses Keamanan"]
APIGW -->|2. Validasi Token| AuthLambda["Custom Lambda Authorizer"]
AuthLambda -->|3. Return IAM Policy<br/>Allow/Deny| APIGW
end
APIGW -->|4. Jika Allow, Rute ke| Integration{"Tipe Integrasi"}
subgraph Backend["Backend Execution"]
Integration -->|Lambda Proxy| Lambda["Fungsi Lambda"]
Integration -->|Direct AWS Integration| SQS["Amazon SQS (Queue)"]
Integration -->|HTTP Proxy| HTTP["Server Eksternal"]
end
Lambda -->|5. Return Response| APIGW
SQS -->|5. Return Accepted| APIGW
HTTP -->|5. Return Response| APIGW
APIGW -->|6. Kirim Response ke| Client
Mekanisme Autentikasi dan Otorisasi: #
- IAM Authorization: Menggunakan tanda tangan kunci AWS (Signature Version 4) untuk mengamankan komunikasi antar-layanan internal AWS atau akses dari aplikasi klien yang terintegrasi dengan kredensial IAM.
- Cognito User Pools Authorizer: Integrasi native dengan Amazon Cognito untuk memvalidasi token JWT (JSON Web Tokens) dari pengguna yang sukses login melalui OAuth2.
- Custom Lambda Authorizer: Fungsi Lambda khusus yang kita tulis untuk memvalidasi token keamanan buatan sendiri (misalnya custom JWT atau session token pihak ketiga) dan mengembalikan dokumen IAM Policy yang menentukan apakah klien diizinkan (
Allow) atau dilarang (Deny) mengakses resource path tersebut.
Mekanisme Rate Limiting (Throttling) #
Untuk melindungi backend kita dari serangan penolakan layanan (DDoS) atau lonjakan trafik tak terduga (thundering herd), API Gateway menerapkan pembatasan rate request menggunakan algoritma Token Bucket.
- Rate (RPS): Jumlah rata-rata request per detik yang diizinkan mengalir secara stabil ke backend.
- Burst: Kapasitas maksimal penampung instan (bucket) untuk menangani lonjakan request yang sangat cepat dalam hitungan milidetik.
Jika klien mengirimkan request melebihi batas Rate + Burst, API Gateway akan langsung memotong request tersebut di tingkat gateway dan mengembalikan status error HTTP 429 Too Many Requests tanpa meneruskannya ke backend Lambda, sehingga mengamankan resource komputasi kita.
Integrasi Proxy AWS Langsung (Direct Integration) #
Salah satu rahasia arsitektur berkinerja tinggi dan efisien biaya di AWS adalah Direct AWS Service Integration.
Banyak tim pemula mendeploy alur: API Gateway -> Lambda -> SQS. Tujuannya hanya untuk memasukkan data request ke dalam antrean. Pola ini memicu pemborosan biaya invokasi Lambda dan menambahkan latensi cold start.
API Gateway mendukung integrasi langsung ke layanan AWS tanpa perantara Lambda. Kita dapat mengonfigurasi rute /submit-order di API Gateway untuk menulis payload HTTP langsung ke dalam antrean Amazon SQS secara asinkron menggunakan format payload terabstraksi di gateway. Ini memangkas biaya komputasi Lambda hingga 100% untuk alur pengiriman data awal.
Contoh Implementasi: Custom Lambda Authorizer #
Berikut adalah contoh penulisan kode Node.js untuk fungsi Lambda Authorizer yang memvalidasi header token Authorization dan mengembalikan dokumen kebijakan IAM Allow/Deny.
// BENAR: Menghasilkan IAM Policy terstruktur secara aman
export const handler = async (event) => {
// Ambil token dari header Authorization
const token = event.headers?.authorization || event.headers?.Authorization;
if (!token) {
console.log("Token tidak ditemukan di request header.");
throw new Error("Unauthorized"); // Mengembalikan HTTP 401 Unauthorized
}
try {
// Jalankan logika validasi token (Simulasi validasi JWT)
const userPayload = validateToken(token);
// Buat IAM Policy Document
const principalId = userPayload.userId;
const effect = userPayload.role === "admin" ? "Allow" : "Deny";
const methodArn = event.routeArn; // ARN dari route yang sedang diakses
console.log(`User ${principalId} diverifikasi dengan hasil: ${effect}`);
return generatePolicy(principalId, effect, methodArn);
} catch (err) {
console.error("Token validasi gagal", err);
throw new Error("Unauthorized");
}
};
// Fungsi pembantu untuk memvalidasi token JWT (Simulasi)
function validateToken(token) {
if (token === "Bearer token-rahasia-admin") {
return { userId: "user-123", role: "admin" };
} else {
throw new Error("Token tidak valid");
}
}
// Fungsi pembantu untuk menyusun dokumen IAM Policy
function generatePolicy(principalId, effect, resource) {
const authResponse = {
principalId: principalId
};
if (effect && resource) {
const policyDocument = {
Version: '2012-10-17',
Statement: [
{
Action: 'execute-api:Invoke',
Effect: effect,
Resource: resource
}
]
};
authResponse.policyDocument = policyDocument;
}
// Suntikkan context tambahan untuk dibaca oleh Lambda backend berikutnya
authResponse.context = {
userId: principalId,
scope: "write:orders"
};
return authResponse;
}
Ringkasan #
- AWS API Gateway adalah API management platform serverless yang bertindak sebagai pintu masuk utama yang aman, scalable, dan terkelola penuh untuk aplikasi kita.
- HTTP API adalah pilihan utama untuk RESTful API modern karena menawarkan latensi pemrosesan internal yang lebih cepat dan biaya 70% lebih murah.
- REST API menyediakan fitur enterprise lengkap seperti API Keys bawaan, pembatasan kuota (Usage Plans), caching di tingkat gateway, dan integrasi dengan WAF.
- Throttling berbasis Token Bucket wajib dikonfigurasi di tingkat gateway untuk melindungi sistem backend dari serangan spam request (HTTP 429).
- Gunakan Direct AWS Service Integration (seperti menulis langsung ke SQS dari API Gateway) untuk mengeliminasi kebutuhan Lambda penengah dan memangkas biaya.