이 블로그 게시물은 Prisma를 사용하여 일, 월, 연도별로 데이터를 그룹화하는 실용적인 솔루션을 제공합니다. 나는 이 문제로 어려움을 겪었으므로 이 간소화된 접근 방식을 공유하고 있습니다. Next.js API 엔드포인트를 사용하여 Prisma 및 MongoDB를 사용한 API 호출 추세를 분석하고 시간 경과에 따른 성공률 및 호출 빈도에 중점을 둘 것입니다.
효과적인 대시보드를 만들려면 API 호출을 시간 간격별로 그룹화해야 합니다. 간결한 Prisma 스키마를 사용해 보겠습니다.
<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>
이 스키마는 추세 분석에 충분한 각 API 호출의 타임스탬프와 상태를 추적합니다.
이 Next.js API 엔드포인트는 API 호출 데이터를 집계하여 지정된 기간(연도, 월 또는 일)별로 그룹화합니다.
<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>
다음과 같은 요청:
<code>GET /api/your-endpoint?range=year&groupby=monthly</code>
다음과 같은 반응이 나올 수 있습니다:
<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>
이 접근 방식은 Prisma ORM을 사용하여 MongoDB 내에서 다양한 시간 범위로 그룹화된 타임스탬프 데이터를 쿼리하고 분석하는 강력하고 효율적인 방법을 제공합니다. 읽어주셔서 감사합니다! 더 많은 콘텐츠를 보려면 좋아요와 구독을 눌러주세요! GitHub와 LinkedIn에서 저와 소통하세요.
위 내용은 Prisma 및 Next.js를 사용하여 API 호출 추세 분석: 주, 월 또는 연도별 그룹화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!