Next.js 14 menjadi standar baru untuk pengembangan aplikasi React full‑stack. Tutorial ini menjelaskan langkah‑langkah instalasi, konfigurasi, contoh kode, serta best practice untuk menghubungkan aplikasi Anda dengan OpenAI API, sehingga Anda dapat menambahkan fitur AI seperti chat, summarization, atau code generation secara real‑time.
1. Prasyarat & Persiapan Lingkungan
Sebelum memulai, pastikan Anda telah menginstal versi terbaru Node.js (v20.10 atau lebih tinggi) dan npm (v10.x). Anda juga membutuhkan akun OpenAI dengan API key aktif. Jika belum memiliki, daftar di OpenAI Platform.
1.1. Instalasi Node.js & npm
# Untuk macOS/Linux dengan Homebrew
brew install node@20
# Windows dengan Chocolatey
choco install nodejs-lts
1.2. Verifikasi Instalasi
node -v # → v20.10.0
npm -v # → 10.2.0
2. Membuat Proyek Next.js 14 Baru
Next.js 14 memperkenalkan App Router secara default. Gunakan perintah berikut untuk memulai proyek tanpa konfigurasi tambahan.
npx create-next-app@latest my-next-ai-app --experimental-app-dir
Perintah di atas akan menghasilkan struktur folder seperti:
my-next-ai-app/
├─ app/ # App Router
├─ public/
├─ next.config.mjs
├─ package.json
└─ ...
2.1. Memasuki Direktori Proyek
cd my-next-ai-app
2.2. Menjalankan Server Development
npm run dev
Buka http://localhost:3000—Anda akan melihat halaman welcome default Next.js.
3. Menambahkan TypeScript (Opsional tapi Direkomendasikan)
TypeScript meningkatkan keamanan kode terutama saat berinteraksi dengan API eksternal.
npm install -D typescript @types/react @types/node
npx tsc --init
Setelah itu, rename file .js di dalam folder app menjadi .tsx dan .ts untuk utility.
4. Instalasi Dependency OpenAI SDK
OpenAI merilis SDK resmi untuk JavaScript/Node v4 yang mendukung streaming dan fungsi fungsi.
npm install openai
4.1. Membuat File konfigurasi API
Buat file lib/openai.ts (atau .ts bila menggunakan TypeScript).
import OpenAI from "openai";
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
// Pada 2026, OpenAI menambahkan header baru untuk traceability
defaultHeaders: { "OpenAI-Trace-Id": crypto.randomUUID() }
});
export default openai;
5. Menyiapkan Environment Variables
Next.js 14 membaca variabel dari file .env.local pada root proyek.
# .env.local
OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Pastikan file ini tidak di‑commit ke repo (default sudah ditambahkan ke .gitignore).
6. Membuat API Route untuk OpenAI
Dengan App Router, API route ditempatkan di app/api/. Kita buat endpoint /api/chat yang menerima pesan dan mengembalikan respons streaming.
// app/api/chat/route.ts
import { NextResponse } from "next/server";
import openai from "@/lib/openai";
export async function POST(req: Request) {
const { messages } = await req.json();
if (!messages || !Array.isArray(messages)) {
return NextResponse.json({ error: "Invalid payload" }, { status: 400 });
}
const stream = await openai.chat.completions.create({
model: "gpt-4o-mini",
messages,
stream: true,
});
// Next.js 14 streaming response (Server Sent Events)
const encoder = new TextEncoder();
const readable = new ReadableStream({
async pull(controller) {
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || "";
controller.enqueue(encoder.encode(content));
}
controller.close();
}
});
return new NextResponse(readable, {
headers: { "Content-Type": "text/event-stream" }
});
}
6.1. Penjelasan Singkat
POSTmenerima JSON dengan propertimessages(format OpenAI chat).- Kita memanggil
openai.chat.completions.createdenganstream: trueuntuk mendapatkan data secara real‑time. - Response dibungkus dalam
ReadableStreamsehingga frontend dapat menampilkan teks seiring kedatangan.
7. Membuat UI Chat di Frontend
Tambahkan halaman chat di app/chat/page.tsx.
"use client";
import { useState, useRef } from "react";
export default function ChatPage() {
const [messages, setMessages] = useState([]);
const [input, setInput] = useState("");
const eventSourceRef = useRef<EventSource | null>(null);
const sendMessage = async () => {
if (!input.trim()) return;
const userMsg = { role: "user", content: input };
setMessages(prev => [...prev, userMsg]);
setInput("");
// Append user message ke payload
const payload = { messages: [...messages, userMsg] };
// Menggunakan EventSource untuk SSE
eventSourceRef.current?.close();
eventSourceRef.current = new EventSource("/api/chat", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload)
});
let assistantContent = "";
eventSourceRef.current.onmessage = (e) => {
assistantContent += e.data;
setMessages(prev => {
const withoutAssistant = prev.filter(m => m.role !== "assistant");
return [...withoutAssistant, { role: "assistant", content: assistantContent }];
});
};
eventSourceRef.current.onerror = () => {
eventSourceRef.current?.close();
};
};
return (
AI Chat dengan OpenAI & Next.js 14
{messages.map((msg, i) => (
{msg.role}: {msg.content}
))}
setInput(e.target.value)}
className="flex-1 border rounded p-2"
placeholder="Ketik pesan..."
/>
);
}
7.1. Catatan Implementasi
- Komponen ditandai dengan
"use client"karena menggunakan state dan EventSource. - Next.js 14 tidak mendukung
fetchstreaming pada client-side secara native; SSE viaEventSourcetetap bekerja di semua browser modern. - Best practice: batasi panjang
messagesmenjadi 20 entri untuk menghindari payload terlalu besar.
8. Optimasi & Best Practice
8.1. Rate Limiting & Caching
Gunakan middleware di middleware.ts untuk membatasi 60 permintaan per menit per IP dan cache hasil dengan NextResponse.revalidate bila percakapan tidak sensitif.
8.2. Security
- Jangan kirim
OPENAI_API_KEYke client. Semua panggilan harus melalui API route. - Gunakan
Content‑Security‑Policyheader untuk mencegah injection. - Validasi dan sanitasi semua input pengguna sebelum menambahkannya ke payload.
8.3. Performance
- Aktifkan
runtime: "edge"pada API route bila Anda menggunakan Vercel Edge Functions untuk latency ultra‑rendah. - Gunakan
next/imageuntuk mengoptimalkan gambar statis pada UI.
9. Deploy ke Vercel (Free Tier)
# Pastikan git sudah terinisialisasi
git init
git add .
git commit -m "Initial commit"
# Push ke repository GitHub
git remote add origin https://github.com/username/my-next-ai-app.git
git push -u origin main
# Pada dashboard Vercel, pilih "New Project" -> import repo -> set Build Command: npm run build, Output Directory: .next
# Tambahkan environment variable OPENAI_API_KEY pada Settings > Environment Variables
Setelah deploy, aplikasi tersedia pada https://my-next-ai-app.vercel.app dengan latency biasanya < 100 ms untuk respon AI (tergantung beban OpenAI).
10. Studi Kasus: Menambahkan Fitur Summarization Dokumen
Misalkan tim produk ingin menambahkan tombol "Ringkas" di atas teks artikel. Implementasinya hanya memanggil API yang sama dengan prompt khusus.
// app/api/summarize/route.ts
import { NextResponse } from "next/server";
import openai from "@/lib/openai";
export async function POST(req: Request) {
const { content } = await req.json();
if (!content) return NextResponse.json({ error: "No content" }, { status: 400 });
const completion = await openai.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "system", content: "You are a concise summarizer." }, { role: "user", content }],
max_tokens: 150,
});
const summary = completion.choices[0].message.content.trim();
return NextResponse.json({ summary });
}
Di UI, panggil endpoint ini dengan fetch biasa dan tampilkan summary dalam modal.
11. Trouble‑shooting Umum
- 500 Internal Server Error: Pastikan
OPENAI_API_KEYter‑set di environment dan tidak berisi spasi. - Rate limit 429: Tambahkan exponential backoff di client atau upgrade akun OpenAI.
- SSE tidak muncul di Chrome: Pastikan header
Cache-Control: no-storedikirim; tambahkan di API route jika perlu.
Dengan mengikuti langkah‑langkah di atas, Anda sudah memiliki aplikasi Next.js 14 yang menggunakan App Router, streaming SSE, dan terintegrasi dengan OpenAI API. Tutorial mencakup instalasi, konfigurasi environment, pembuatan API route, UI React modern, serta best practice keamanan dan performa. Selanjutnya, Anda dapat memperluas fitur AI—seperti summarization, code generation, atau image generation—sesuai kebutuhan produk, sekaligus memanfaatkan kemampuan edge runtime Vercel untuk latency ultra‑rendah.
Panduan lengkap setup Next.js 14 dengan App Router, integrasi OpenAI API, dan contoh kode chat AI real‑time. Termasuk best practice, deployment Vercel, dan studi kasus summarization.
Programming,Software Engineering,Web Development
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar