Error Handling — API

Error handling yang konsisten membuat API mudah digunakan dan di-debug. Prinsip: Gunakan status code yang tepat Format error yang konsisten Pesan yang actionabl

Error handling yang konsisten membuat API mudah digunakan dan di-debug.

Prinsip:

  1. Gunakan status code yang tepat
  2. Format error yang konsisten
  3. Pesan yang actionable (jelas apa yang salah)
  4. Jangan expose internal details di production

Error response standard:

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Input tidak valid",
    "details": [
      { "field": "email", "message": "Format email tidak valid" },
      { "field": "name", "message": "Minimal 2 karakter" }
    ]
  }
}

Error codes:

Code Status Kapan
VALIDATION_ERROR 400/422 Input tidak valid
UNAUTHORIZED 401 Belum login
FORBIDDEN 403 Tidak punya akses
NOT_FOUND 404 Resource tidak ada
CONFLICT 409 Data sudah ada (duplicate)
INTERNAL_ERROR 500 Bug di server

Centralized error handler:

app.use((err, req, res, next) => {
  const status = err.status || 500;
  const message = status === 500 ? "Internal server error" : err.message;

  // Log full error for debugging
  if (status === 500) console.error(err.stack);

  res.status(status).json({
    error: { code: err.code || "UNKNOWN", message }
  });
});

Yang akan kamu pelajari