مستنداتبخش برنامه نویساناتصال Strapi v5 CMS، وب‌هوک‌ها و همگام‌سازی بی‌وقفه

یکپارچه‌سازی 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، کش فرانت‌اند فوراً و بدون ری‌استارت سرور پاک شود:

  1. وارد پنل Strapi شوید و به مسیر Settings > Webhooks بروید.
  2. دکمه Create new Webhook را بزنید.
  3. Name: نام دلخواه مانند Next.js Revalidation Webhook بگذارید.
  4. URL: آدرس http://storefront:3000/api/revalidate (در شبکه داخلی داکر) یا https://yourdomain.com/api/revalidate را وارد کنید.
  5. Events: تیک رویدادهای Entry (ایجاد، ویرایش، حذف، انتشار و لغو انتشار) را بزنید.
تنظیم هدر امنیتی و Secret Code
در بخش Headers تنظیمات Webhook استرپی:
  • 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.
نمونه اعتبارسنجی امنیتی هدر x-strapi-secret در Next.js (app/api/revalidate/route.ts)
typescript
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 یا دسترسی مستقیم به سرور تریگر کنند.

API فراخوانی استورفرانت
bash
# 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) و چندزبانی
در پنل ادمین Medusa، عنوان اپشن مربوط به رنگ حتماً باید کلمه color یا Color باشد تا سیستم سواچ رنگی UI و فیلترهای بصری به درستی کار کنند. ترجمه عنوان آن برای تمام زبان‌های هدف (مانند انگلیسی، فارسی، عربی، آلمانی، ترکی و ...) از طریق Strapi CMS به‌صورت متناظر انجام می‌پذیرد.