یکپارچهسازی Strapi v5 CMS، وبهوکها و همگامسازی اتوماتیک بدون ترمینال
سیستم Strapi v5 CMS مسئولیت ذخیرهسازی دادههای چیدمان صفحات، تنظیمات عمومی سایت، بنرها، اسلایدرها و مقالات وبلاگ را بر عهده دارد.
۱. چرا روتهای Next.js 16 فورسکش (Force-Cache) میشوند؟
در Next.js 16 App Router، تمامی درخواستهای fetch بهطور پیشفرض به صورت سرسختانه کش میشوند (Force-Cache) تا لود صفحات میلیثانیهای شود. جهت بازنشانی و پاکسازی کش هنگام بروزرسانی محتوا در Strapi یا Medusa، از معماری On-Demand Cache Revalidation استفاده شده است.
۲. راهنمای گامبهگام تنظیم Webhook در پنل Strapi CMS
برای اینکه با ذخیره یا انتشار برگه در Strapi، کش فرانتاند فوراً و بدون ریاستارت سرور پاک شود:
- وارد پنل Strapi شوید و به مسیر Settings > Webhooks بروید.
- دکمه Create new Webhook را بزنید.
- Name: نام دلخواه مانند
Next.js Revalidation Webhookبگذارید. - URL: آدرس
http://storefront:3000/api/revalidate(در شبکه داخلی داکر) یاhttps://yourdomain.com/api/revalidateرا وارد کنید. - Events: تیک رویدادهای
Entry(ایجاد، ویرایش، حذف، انتشار و لغو انتشار) را بزنید.
تنظیم هدر امنیتی و Secret Code
- Name (نام هدر): حتماً عبارت دقیق
x-strapi-secretرا تایپ کنید. - Value (مقدار هدر): مقدار کلید راز متغیر
REVALIDATE_SECRETموجود در فایل.envرا قرار دهید. - *(روش جایگزین: ارسال سکرت در آخر URL بهصورت
?secret=YOUR_REVALIDATE_SECRET)*.
- تایید اصالت درخواست: دریافت سکرت از هدر اختصاصی
x-strapi-secretیا پارامتر کوئری. - مدیریت کش انتخابی: پاکسازی کش برچسبهای متناظر با مدل استرپی (مثلاً
strapi-homepage).
لیست وبهوکهای ضروری (Checklist)
برای عملکرد صحیح کش سایت، باید وبهوکهای زیر را دقیقاً با همین مسیرها در Strapi تعریف کنید. در تمامی این وبهوکها، تنظیم هدر x-strapi-secret الزامی است:
- ✔۱. home page (صفحه اصلی): آدرس
/api/revalidate/home-page- برای پاک کردن کش صفحه اول سایت هنگام تغییر تنظیمات. رویدادهای پیشنهادی:Delete,Publish,Unpublish. - ✔۲. menu (منوها): آدرس
/api/revalidate/menu- کش منوها را پاک میکند. نکته مهم: این وبهوک نیازی به انتخاب Event (تیک زدن) ندارد. زمانی که در پلاگین Navigation استرپی تغییری میدهید، باید روی دکمه Trigger این وبهوک کلیک کنید تا تغییرات در سایت (هدر و فوتر) اعمال شود. - ✔۳. blog (مقالات): آدرس
/api/revalidate/blog- جهت بروزرسانی کش مقالات هنگام انتشار یا ویرایش مقاله. رویدادهای پیشنهادی:Delete,Publish. - ✔۴. pages (صفحات عمومی): آدرس
/api/revalidate- وبهوک عمومی برای سایر کالکشنها (مانند صفحات داینامیک) جهت پاکسازی کش. رویدادهای پیشنهادی:Create,Update,Delete. - ✔۵. settings (تنظیمات سراسری و دیکشنری): آدرس
/api/revalidate/strapi-settings- جهت پاکسازی لحظهای کش تنظیمات عمومی استورفرانت (رنگ تم، هدر، فوتر، کارتها، استایلها) و ترجمههای لغتنامه (مدلهایstorefront-settingوdictionary-entry). رویدادهای پیشنهادی:Delete,Publish,Unpublish.
import crypto from "node:crypto"import { revalidateTag } from "next/cache"import { NextRequest, NextResponse } from "next/server" function isValidSecret(providedSecret: string | null): boolean { if (!providedSecret || !process.env.REVALIDATE_SECRET) return false const actual = new Uint8Array(crypto.createHash("sha256").update(providedSecret).digest()) const expected = new Uint8Array(crypto.createHash("sha256").update(process.env.REVALIDATE_SECRET).digest()) return crypto.timingSafeEqual(actual, expected)} export async function POST(request: NextRequest) { const secret = request.headers.get("x-strapi-secret") || request.nextUrl.searchParams.get("secret") if (!isValidSecret(secret)) { return NextResponse.json({ message: "Invalid secret" }, { status: 401 }) } const body = await request.json() if (body.model) { revalidateTag(`strapi-${body.model}`) } return NextResponse.json({ revalidated: true, now: Date.now() })}۳. Revalidate اتوماتیک کش محصولات از سمت Medusa
هنگامی که محصولی در پنل Medusa ویرایش میشود، Subscriber یا Workflow مربوطه رویداد product.updated را پردازش کرده و یک در خواست HTTP به `/api/revalidate` ارسال میکند تا برچسبهای کش products و product-[id] منقضی گردند.
۴. مدیریت استورفرانت و همگامسازی استایلها در Strapi
استراپی دارای یک صفحه اختصاصی Storefront Management ساخته شده با Strapi Design System است. از این صفحه، مدیران محتوا و برنامهنویسان میتوانند کامپوننت مورد نظر را انتخاب کرده، استایل جدید را وارد نمایند، صف تغییرات را بررسی کنند و با یک کلیک بیلد پروداکشن را از طریق GitHub Actions بدون نیاز به SSH یا دسترسی مستقیم به سرور تریگر کنند.
# Trigger component style sync via Strapi Admin API:POST /api/storefront/sync-component{ "componentName": "home/components/ProductShowcase", "style": "style-2", "action": "add", "autoDeploy": false} # Trigger batch production build to GitHub Actions:POST /api/storefront/buildتغییرات در فایل .sync-history.json ذخیره میشوند تا بتوان چندین کامپوننت را بهصورت دستهای قبل از ارسال بیلد نهایی تنظیم کرد.
ترجمه اپشنهای محصولات و قاعده کلید رنگ (Product Options Translation)
قانون نامگذاری کلید رنگ (color) و چندزبانی
color یا Color باشد تا سیستم سواچ رنگی UI و فیلترهای بصری به درستی کار کنند. ترجمه عنوان آن برای تمام زبانهای هدف (مانند انگلیسی، فارسی، عربی، آلمانی، ترکی و ...) از طریق Strapi CMS بهصورت متناظر انجام میپذیرد.