Rumah >hujung hadapan web >tutorial js >Menganalisis Aliran Panggilan API dengan Prisma dan Next.js: Pengumpulan mengikut Minggu, Bulan atau Tahun
Catatan blog ini menyediakan penyelesaian praktikal untuk mengumpulkan data mengikut hari, bulan atau tahun menggunakan Prisma. Saya sendiri bergelut dengan perkara ini, jadi saya berkongsi pendekatan yang diperkemas ini. Kami akan menggunakan titik akhir API Next.js untuk menganalisis aliran panggilan API menggunakan Prisma dan MongoDB, memfokuskan pada kadar kejayaan dan kekerapan panggilan dari semasa ke semasa.
Papan pemuka yang berkesan memerlukan pengumpulan panggilan API mengikut selang masa. Jom gunakan skema Prisma yang ringkas:
<code>model ApiCall { id String @id @default(auto()) @map("_id") @db.ObjectId timestamp DateTime @default(now()) status ApiCallStatus // Enum for success or failure. } enum ApiCallStatus { SUCCESS FAILURE }</code>
Skema ini menjejaki cap masa dan status setiap panggilan API, mencukupi untuk analisis arah aliran.
Titik akhir API Next.js ini mengagregatkan data panggilan API, mengumpulkannya mengikut tempoh masa tertentu (tahun, bulan atau hari):
<code>import { NextRequest, NextResponse } from 'next/server'; import { startOfYear, endOfYear, startOfMonth, endOfMonth } from 'date-fns'; export async function GET(req: NextRequest) { const range = req.nextUrl.searchParams.get("range"); // 'year' or 'month' const groupBy = req.nextUrl.searchParams.get("groupby"); // 'yearly', 'monthly', 'daily' // Input validation if (!range || (range !== 'year' && range !== 'month')) { return NextResponse.json({ error: "Range must be 'year' or 'month'" }, { status: 400 }); } if (!groupBy || (groupBy !== 'yearly' && groupBy !== 'monthly' && groupBy !== 'daily')) { return NextResponse.json({ error: "Group by must be 'yearly', 'monthly', or 'daily'" }, { status: 400 }); } try { let start: Date, end: Date; if (range === 'year') { start = startOfYear(new Date()); end = endOfYear(new Date()); } else { // range === 'month' start = startOfMonth(new Date()); end = endOfMonth(new Date()); } let groupByFormat: string; switch (groupBy) { case 'yearly': groupByFormat = "%Y"; break; case 'monthly': groupByFormat = "%Y-%m"; break; case 'daily': groupByFormat = "%Y-%m-%d"; break; } const apiCallTrends = await db.apiCall.aggregateRaw({ pipeline: [ { $match: { timestamp: { $gte: { $date: start }, $lte: { $date: end } } } }, { $group: { _id: { $dateToString: { format: groupByFormat, date: '$timestamp' } }, SUCCESS: { $sum: { $cond: [{ $eq: ['$status', 'SUCCESS'] }, 1, 0] } }, FAILURE: { $sum: { $cond: [{ $eq: ['$status', 'FAILURE'] }, 1, 0] } }, TOTAL: { $sum: 1 } } }, { $sort: { _id: 1 } } ] }); return NextResponse.json({ apiCallTrends }); } catch (error) { console.error(error); return NextResponse.json({ error: "An error occurred while fetching data." }, { status: 500 }); } }</code>
Permintaan seperti ini:
<code>GET /api/your-endpoint?range=year&groupby=monthly</code>
Mungkin menghasilkan respons ini:
<code>{ "apiCallTrends": [ { "_id": "2025-01", // January 2025 "SUCCESS": 120, "FAILURE": 15, "TOTAL": 135 }, { "_id": "2025-02", // February 2025 "SUCCESS": 110, "FAILURE": 10, "TOTAL": 120 }, { "_id": "2025-03", // March 2025 "SUCCESS": 130, "FAILURE": 20, "TOTAL": 150 } // ... more monthly data ] }</code>
Pendekatan ini menyediakan kaedah yang mantap dan cekap untuk menyoal dan menganalisis data bercap masa yang dikumpulkan mengikut pelbagai julat masa dalam MongoDB, menggunakan Prisma ORM. Terima kasih kerana membaca! Sila like dan subscribe untuk lebih banyak kandungan! Berhubung dengan saya di GitHub dan LinkedIn.
Atas ialah kandungan terperinci Menganalisis Aliran Panggilan API dengan Prisma dan Next.js: Pengumpulan mengikut Minggu, Bulan atau Tahun. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!