Menangani Masalah Tipe Data Tidak Terduga dan Kompleksitas Struktur Model pada API

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.
Search for a command to run...

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.
No comments yet. Be the first to comment.
Ringkasan: Jika OpenClaw adalah AI Operating System yang menghubungkan berbagai layanan dan agent, maka Hermes adalah AI Worker yang fokus mengerjakan pekerjaan, belajar dari pengalaman, dan semakin p

Ketika membangun aplikasi modern seperti Next.js, Cloudflare Workers, platform AI, microservices, atau real-time dashboard, ada banyak istilah jaringan yang sering muncul: TCP, UDP, HTTP/2, QUIC, WebS

Setiap tahun, ribuan mahasiswa jurusan Teknologi Informasi, Sistem Informasi, dan Teknik Informatika diwisuda. Namun, tidak sedikit di antara mereka yang kemudian menghadapi kenyataan yang cukup berat

Jika Anda menggunakan Next.js, kemungkinan besar Anda pernah mendengar anggapan bahwa: "Next.js = Vercel" Padahal kenyataannya tidak harus demikian. Di sinilah OpenNext hadir. OpenNext adalah proyek

Saat pertama kali mencoba OpenCode Go, saya hampir langsung berlangganan tanpa membaca detail program yang mereka sediakan. Untungnya saya menemukan bahwa OpenCode memiliki program referral yang membe

Dalam pengembangan API, salah satu tantangan utama adalah menangani data yang tidak sesuai dengan ekspektasi dan beragam struktur data terutama pada request dan response. Masalah ini bisa muncul dalam berbagai bahasa pemrograman dan framework, termasuk TypeScript, JavaScript, Go, Python, dan lainnya.
Misal Anda membuat fungsi sederhana seperti ini:
function jumlah(a: number, b: number): number {
return a + b;
}
Idealnya, a dan b harus bertipe number. Namun, jika API menerima string, misalnya "5" atau "abc", dan langsung dieksekusi tanpa validasi, maka:
Bisa terjadi konversi implisit yang menghasilkan hasil tak terduga ("5" + "6" = "56").
Bisa terjadi error runtime jika operasi tidak bisa dilakukan.
Data yang datang dari request HTTP adalah string secara default.
Tanpa validasi eksplisit, data langsung diproses.
Di JavaScript/TypeScript, operator + antara string dan number akan melakukan konkatenasi string.
Data salah diolah, menghasilkan output yang tidak valid.
API menjadi tidak dapat diandalkan.
Sulit untuk debugging dan tracing kesalahan.
Gunakan validasi tipe data pada awal fungsi atau API endpoint sebelum diproses.
Contoh dengan TypeScript dan typeof:
function jumlah(a: unknown, b: unknown): number {
if (typeof a !== 'number' || typeof b !== 'number') {
throw new Error('Parameter harus bertipe number');
}
return a + b;
}
Atau menggunakan library validasi seperti Zod, Joi, atau Yup:
import { z } from 'zod';
const jumlahSchema = z.object({
a: z.number(),
b: z.number(),
});
function jumlah(data: unknown) {
const parsed = jumlahSchema.parse(data); // validasi dan konversi otomatis
return parsed.a + parsed.b;
}
Jika data bisa berupa string angka, konversi terlebih dahulu:
function jumlah(a: unknown, b: unknown): number {
const numA = Number(a);
const numB = Number(b);
if (isNaN(numA) || isNaN(numB)) {
throw new Error('Parameter harus berupa angka valid');
}
return numA + numB;
}
Saat Anda membuat GET API yang mendapatkan data dengan banyak bentuk struktur model, tantangannya adalah:
Bagaimana cara menentukan tipe data yang valid?
Bagaimana cara memvalidasi response?
Bagaimana cara menyusun kode agar mudah dipelihara?
API bisa merespon dengan format data yang berbeda berdasarkan kondisi tertentu.
Misal:
// Model A
{ "type": "A", "value": 123 }
// Model B
{ "type": "B", "name": "John", "age": 30 }
Jika API response bisa berbeda bentuk tapi ada field discriminator (type):
type ModelA = { type: 'A'; value: number };
type ModelB = { type: 'B'; name: string; age: number };
type ResponseModel = ModelA | ModelB;
function handleResponse(data: ResponseModel) {
if (data.type === 'A') {
// proses data model A
} else if (data.type === 'B') {
// proses data model B
}
}
Dengan Zod atau Joi, buat skema yang sesuai dengan setiap model:
const modelASchema = z.object({
type: z.literal('A'),
value: z.number(),
});
const modelBSchema = z.object({
type: z.literal('B'),
name: z.string(),
age: z.number(),
});
const responseSchema = z.union([modelASchema, modelBSchema]);
const parsedData = responseSchema.parse(apiResponse);
Pisahkan handler dan validator untuk setiap model agar kode lebih mudah dipelihara.
Gunakan OpenAPI (Swagger) untuk mendefinisikan berbagai response secara jelas.
| Masalah | Solusi |
| Data input tidak sesuai tipe | Validasi input, parsing, gunakan schema |
| Operasi pada tipe tidak valid | Tangani error dan fallback |
| Banyak struktur model API | Gunakan discriminated union, schema union |
| Model kompleks | Modularisasi, dokumentasi, unit test |