Cara Bikin API Sederhana Tanpa Framework Berat

Cara Bikin API Sederhana Tanpa Framework Berat

Cara Bikin API Sederhana Tanpa Framework Berat

Pembukaan

Bikin API itu kadang terasa ribet, apalagi kalau yang kamu lihat di internet isinya selalu Express, NestJS, Fastify, Hono, dan kawan-kawan. Framework-framework itu powerful, tapi buat sebagian anak muda yang baru belajar backend atau lagi nyari bahan bikin portofolio yang clean dan mudah dijelaskan, mereka bisa terasa terlalu berat.

Padahal, kenyataannya kamu bisa bikin API yang simple, cepat dipahami, dan cukup buat kebutuhan belajar—tanpa framework apa pun. Cukup pakai runtime bawaan seperti Node.js native, Deno, atau Bun. Tiga-tiganya sama-sama bisa bikin server HTTP dalam beberapa baris kode saja.

Artikel ini bakal jadi panduan lengkap dan santai buat kamu yang pengin:

  • Paham cara kerja HTTP secara dasar
  • Bikin API kecil tanpa framework
  • Punya skill yang kelihatan “engineer-minded” saat bikin portofolio
  • Lebih ngerti cara kerja framework karena tahu fondasinya dulu

Kita bakal bongkar langkah demi langkah dari konsep, contoh kode, cara jalanin, sampai tips personal branding buat nunjukin proyek kamu biar lebih menarik buat HR dan tech recruiter.

Ayo mulai.

Kenapa memilih tanpa framework berat

Sebelum nyemplung ke kodingan, kita perlu paham dulu: kenapa sih repot-repot bikin API tanpa framework? Bukannya Express itu gampang?

Iya, Express gampang — tapi ngerti hal-hal dasarnya itu jauh lebih penting.

1. Kamu paham HTTP secara fundamental

Kalau pakai framework, biasanya semua parsing, routing, dan response handling sudah dibereskan. Kamu tinggal panggil fungsi.

Tapi di balik itu semua ada alur:

  • Request diterima
  • Dibaca header-nya
  • Dibaca body-nya
  • Ditentukan route-nya
  • Dibuat response sesuai format

Belajar pakai native server bikin kamu benar-benar ngerti apa yang terjadi di bawah hood.

2. Proyek kamu terlihat lebih teknis di mata recruiter

Kalau kamu bikin API tanpa framework, kamu bisa jelasin:

“Saya membangun API dari nol menggunakan runtime native agar memahami cara HTTP bekerja sebelum menggunakan framework.”

Kalimat simple begitu menunjukkan kamu ngerti fondasi, bukan cuma copas tutorial.

3. Lebih ringan, lebih cepat dipahami, lebih sedikit dependency

Kadang kamu cuma butuh API buat:

  • testing kecil
  • bot Telegram
  • service internal
  • tugas kampus
  • prototipe cepat
  • belajar routing dari dasar

Framework justru menambah layer yang nggak kamu butuhkan.

4. Cocok untuk runtime modern seperti Deno dan Bun

Deno dan Bun sudah punya Web Standard API built-in.
Artinya, bikin API itu literally cuma beberapa baris.

Nanti kamu bakal lihat contohnya sendiri.

Persiapan lingkungan

Sebelum nulis kode, pastikan kamu punya runtime yang akan kita pakai.

Node.js

Cek versi:

node -v

Minimal Node 18 supaya support fetch dan API modern.

Deno

Install:

curl -fsSL https://deno.land/install.sh | sh

Cek versi:

deno -V

Bun

Install:

curl -fsSL https://bun.sh/install | bash

Cek versi:

bun -v

Konsep dasar HTTP yang perlu kamu pahami dulu

Sebelum bikin API, kamu harus ngerti empat hal simple:

1. Request

Data masuk ke server, berisi:

  • Method (GET, POST, PUT, DELETE)
  • URL
  • Headers (Content-Type, Authorization, dll)
  • Body (biasanya JSON)

2. Response

Server membalas dengan:

  • Status code (200, 404, 500)
  • Headers
  • Body (JSON)

3. Routing

API memutuskan aksi berdasarkan method dan path.

GET /hello POST /api/echo

4. Parsing JSON

Runtime yang berbeda memberikan cara parsing body yang berbeda:

  • Node.js native → manual dari stream
  • Deno → request.json()
  • Bun → request.json()

Ini perbedaan yang bikin belajar jadi seru.

Contoh 1 API sederhana dengan Node.js Native

Walaupun Node.js terkenal dengan Express, Node.js sebenarnya sudah punya modul http bawaan untuk bikin server simpel.

Mari bikin dua endpoint:

  • GET /hello → balas { message: "Hello World" }
  • POST /api/echo → reply dengan JSON yang dikirim user

Kode lengkap Node.js (native)

Buat file: server.js

const http = require("http");

const server = http.createServer((req, res) => {
  const { method, url } = req;

  // Routing GET /hello
  if (method === "GET" && url === "/hello") {
    res.writeHead(200, { "Content-Type": "application/json" });
    res.end(JSON.stringify({ message: "Hello World" }));
    return;
  }

  // Routing POST /api/echo
  if (method === "POST" && url === "/api/echo") {
    let body = "";

    req.on("data", chunk => {
      body += chunk;
    });

    req.on("end", () => {
      try {
        const json = JSON.parse(body);

        res.writeHead(200, { "Content-Type": "application/json" });
        res.end(JSON.stringify({ you\_sent: json }));
      } catch (e) {
        res.writeHead(400, { "Content-Type": "application/json" });
        res.end(JSON.stringify({ error: "Invalid JSON" }));
      }
    });

    return;
  }

  // default 404
  res.writeHead(404, { "Content-Type": "application/json" });
  res.end(JSON.stringify({ error: "Not found" }));
});

server.listen(3000, () => {
  console.log("Server running on http://localhost:3000");
});

Menjalankan server

node server.js

Coba dengan curl

curl http://localhost:3000/hello
  

Post JSON:

curl -X POST http://localhost:3000/api/echo \\
  -H "Content-Type: application/json" \\
  -d '{"name":"Fian"}'
  

Simple dan jelas. Semua mekanisme HTTP dilakukan secara manual.

Contoh 2 API sederhana dengan Deno

// Deno sangat clean. API server-nya cuma satu fungsi:

Deno.serve()

Deno sudah mendukung Web Standard API, jadi bikin API terasa seperti bikin server di Cloudflare Workers atau Bun.

Kode lengkap Deno

Buat file: server.ts

Deno.serve(async (req) => {
  const url = new URL(req.url);

  // GET /hello
  if (req.method === "GET" && url.pathname === "/hello") {
    return new Response(JSON.stringify({ message: "Hello from Deno" }), {
      headers: { "Content-Type": "application/json" }
    });
  }

  // POST /api/echo
  if (req.method === "POST" && url.pathname === "/api/echo") {
    const body = await req.json();
    return new Response(JSON.stringify({ you\_sent: body }), {
      headers: { "Content-Type": "application/json" }
    });
  }

  return new Response(JSON.stringify({ error: "Not Found" }), {
    status: 404,
    headers: { "Content-Type": "application/json" }
  });
});

Jalanin server

deno run --allow-net server.ts

Deno butuh permission eksplisit, salah satu fitur keamanan uniknya.

Test curl

curl http://localhost:8000/hello

Deno feels good. Kodenya pendek, clean, dan sangat modern.

Contoh 3 API sederhana dengan Bun

Bun dirancang untuk performa tinggi dan DX yang cepat.

API server-nya mirip Deno:

Bun.serve()

Kode lengkap Bun

File: server.js

Bun.serve({
  port: 3000,
  fetch(req) {
    const url = new URL(req.url);

    // GET /hello
    if (req.method === "GET" && url.pathname === "/hello") {
      return Response.json({ message: "Hello from Bun" });
    }

    // POST /api/echo
    if (req.method === "POST" && url.pathname === "/api/echo") {
      return req.json().then(body =>
        Response.json({ you\_sent: body })
      );
    }

    return new Response("Not Found", { status: 404 });
  }
});

Jalanin server

bun run server.js

Test curl

curl http://localhost:3000/hello

Bun paling cepat startup-nya, dan syntax-nya sangat clean.

Fitur tambahan yang seru untuk dipelajari

Kalau kamu mau API-nya lebih “developer-like”, kamu bisa tambah fitur kecil berikut:

Router mini

const routes = {
  "GET /hello": () => Response.json({ ok: true })
};

// Pemakaian:
// cari key berdasarkan method + path
  

### **Logger sederhana**

```js
console.log(req.method, req.url);

Middleware wrapper

Bisa bikin fungsi:

function withLogging(handler) {
  return async (req) => {
    console.log(req.method, req.url);
    return handler(req);
  };
}

Rate limiting dasar

Buat Map berisi timestamp per-IP. Sangat bagus untuk portofolio.

Testing dan dokumentasi ringan

Testing paling mudah pakai curl atau httpie.

Untuk dokumentasi:

  • Buat README yang jelas
  • Tambahkan contoh request / response
  • Tambahkan cara menjalankan proyek
  • Tambahkan screenshot terminal

Ini hal kecil tapi bikin repo kamu terlihat jauh lebih rapi.

Deployment minimal

Kamu bisa deploy ke:

  • Deno Deploy → paling cocok untuk Deno
  • Bun Deploy (bun.sh)
  • Render
  • Fly.io
  • Railway

Cukup set environment variable:

PORT=8080

Pastikan aplikasi kamu membaca port dari sistem saat production.

Best practices kecil untuk personal branding

Kalau kamu mau proyek ini beneran bikin HR notice kamu, lakukan hal berikut:

1. Tulis cerita singkat di README

Jelaskan kenapa kamu bikin API tanpa framework:

“Saya ingin memahami fundamental HTTP sebelum menggunakan framework modern.”

Ini menunjukkan kamu engineer yang mau belajar, bukan cuma pakai tool.

2. Tambahkan diagram alur sederhana

Bisa pakai mermaid:

flowchart LR Client --> Server --> JSON Response

3. Buat demo URL

Biar bisa langsung dicoba recruiter.

4. Post di LinkedIn

Tulisan singkat seperti:

“Hari ini saya belajar bikin API dari nol tanpa framework. Seru banget memahami cara Node/Deno/Bun menangani HTTP secara native.”

Konten seperti ini biasanya dapat engagement tinggi.

Penutup

Kamu baru aja belajar membangun API dari nol tanpa framework, pakai tiga runtime berbeda: Node.js, Deno, dan Bun. Dengan memahami dasar-dasar HTTP dan mekanisme server native, kamu bakal jauh lebih siap memahami framework besar seperti Express, Fastify, Hono, atau NestJS.

Selain itu, proyek seperti ini cocok banget untuk portofolio — simple, teknis, clean, dan menunjukkan kamu ngerti fundamental.

Langkah selanjutnya bisa:

  • Menambah autentikasi sederhana
  • Menghubungkan API ke database kecil (SQLite)
  • Membuat test otomatis
  • Deploy API kamu dan share di media sosial profesional

Kalau kamu butuh artikel lanjutan, tinggal bilang: siap kubuatin.

Foto Profil Alfiansa

Written by

Alfiansa

Just someone that loves coding

Share this article