การส่งมอบโปรเจกต์ทันเวลามักหมายถึงการใช้ประโยชน์จากเทคโนโลยีที่มีอยู่ให้มากที่สุด ทุกการตัดสินใจที่นำไปสู่ Custom Implementation ต้องคิดว่าคุณต้อง Maintain โซลูชันของตัวเองด้วย นี่คือเหตุผลที่ Open-source Tools เช่น Strapi จึงเป็นทางเลือกสำหรับการสร้าง REST API โปรเจกต์ถัดไป
Strapi เป็น Headless CMS ระดับ State-of-the-art ให้คุณกำหนด Schema ด้วย Graphical Interface ทำให้ Non-technical People สามารถ Model Data ได้ Development Team สามารถโฟกัสสร้าง Web/Mobile Apps และส่งฟีเจอร์ใหม่โดยไม่กังวล Backend Implementation เพราะมี Big Open-source Community Maintain Strapi
เร่งความเร็ว Backend
Strapi เร็วพอสมควรในการส่ง Response ด้วย SQLite แต่เมื่อ Data และ User Base โตขึ้น อาจไม่ใช่ Best Solution หลัง Hit The Market อาจมี Users พันๆ คนกระจายทั่วโลก
คุณต้อง Scale Out Strapi และ Database Deployments เพื่อรับ Load นั้นๆ จะดีมากถ้าแค่ Plug In Cache ได้ไหม?
เข้าสู่ REST Cache
Strapi REST Cache เป็นชุด Strapi Plugins ช่วยเพิ่ม LRU Caching ให้ Strapi App ลด Actual Database Requests
รองรับ Memory, Couchbase และ Redis และเขียน Custom Provider ได้ ส่วนที่น่าตื่นเต้นคือ Redis Cache Provider ที่เชื่อมต่อ Upstash Redis ได้ในไม่กี่นาที!
Upstash Redis ใช้ได้ใน Scenario ส่วนใหญ่ที่ใช้ Redis ความต่างคือ Setup ได้ไม่กี่คลิก มาพร้อม Global Replication Strapi Instances จะ Route ไป Replica ใกล้ที่สุด สำคัญสำหรับ Fast Cache และเป็น Serverless จ่ายแค่ที่ใช้
มาดูวิธีทำให้ Strapi รันกับ Upstash Redis!
ข้อกำหนดเบื้องต้น
ต้องมี Upstash Account และ Node.js Installation ต้องมี Yarn (Package Manager ที่ Strapi ชอบ)
สร้าง Strapi Project
ข้ามไป "Adding the REST Cache" ได้เลยหากมี Strapi Project อยู่แล้ว ขั้นตอนด้านล่างเพื่อ Setup Data ทำงาน
ขั้นแรก สร้าง Backend ใหม่กับ Strapi:
$ npx create-strapi-app@latest strapi-upstash-redis-cache
หลัง Command เสร็จ Strapi จะเปิด Browser ขอ Admin Login Details สร้าง Data Model และ Content แรก
Modeling Data ด้วย Content-Type Builder
หลัง Login สร้าง Collection Type แรกด้วย Strapi Content-Type Builder Figure 1 แสดงตำแหน่ง Content-Type Builder ใน Strapi Admin Console

กด "Create new collection type" สร้าง Type ใหม่ ชื่อ "Article" เพิ่ม 2 Text Fields Field หนึ่ง Short Text ชื่อ "title" อีกอัน Long Text ชื่อ "content"
Figure 2 แสดง Type ควรเป็นอย่างไรก่อนกด "Save"

หลังนั้น ต้องมี Instance จริงของ Content Type นั้น
สร้าง Content ด้วย Content Manager
ดูตำแหน่ง Content Manager ใน Figure 1 ไปที่นั่น กด "Create new entry" มุมขวาบน
Figure 3 แสดง New Content Entry UI อย่าลืมกด "Save" และ "Publish" มิฉะนั้นจะเป็น Private Draft เข้าถึง Public API ไม่ได้

ตั้งค่า Permissions สำหรับ Content-Type
มี Article Type และ Article จริง แต่เข้าถึง Public ไม่ได้ ต้อง Update Public Role Figure 4 แสดงตำแหน่งใน Navigation

กด Public Role แล้ว "Article" Permissions เลือก "find" และ "findOne" กด "Save" ทุกคนเปิด API จะ List Articles ทั้งหมดและ Load Article เดียวได้
Default Strapi Settings ควรให้ Resource ที่ URL:
https://localhost:1337/api/articles
Response ควรประมาณนี้:
{
"data": [
{
"id": 2,
"attributes": {
"title": "My First Article",
"content": "This is an article!",
"createdAt": "2022-04-06T15:29:48.104Z",
"updatedAt": "2022-04-06T15:29:48.949Z",
"publishedAt": "2022-04-06T15:29:48.948Z"
}
}
],
"meta": {
"pagination": {
"page": 1,
"pageSize": 25,
"pageCount": 1,
"total": 1
}
}
}
เพิ่ม REST Cache
สุดท้าย ส่วนน่าตื่นเต้น: เพิ่ม Caching ด้วย Upstash Redis!
ติดตั้ง 3 Packages ก่อน:
yarn add strapi-plugin-redis \
strapi-plugin-rest-cache \
strapi-provider-rest-cache-redis
3 Packages นี้ทำให้ Strapi ส่ง Data ไป Upstash Redis Database ได้
สร้าง Upstash Redis Database
เพื่อ Configure Cache ให้ถูกต้อง ต้องการ URL ของ Redis Instance สร้าง Upstash Redis Database เปิด Upstash Console กด "Create database"
หลังสร้างเสร็จ Grab Database URL ใช้ไม่กี่วินาที เลือก Tab "Node" คัดลอก URL จาก Code Example ตาม Figure 5

ตั้งค่า REST Cache
สร้างไฟล์ที่ config/plugins.js เนื้อหาดังนี้:
// config/plugins.js
module.exports = {
redis: {
config: {
connections: {
default: {
connection: "REDIS_URL"
},
},
},
},
"rest-cache": {
config: {
provider: {
name: "redis"
},
strategy: {
contentTypes: [{
contentType: "api::article.article",
hitpass: false
}],
// debug: true,
},
},
},
};
ใน Field redis ตั้งค่า Connection ไป Upstash Redis Database URL จากขั้นตอนก่อนหน้ามี Credentials ทั้งหมดที่ Strapi ต้องการ
ใน rest-cache field บอก Cache ว่าใช้ Provider อะไร และ Cache Content Type ไหน ในกรณีนี้คือ Article Content Type hitpass: false ทำให้ Content ถูก Cache เสมอ แม้จะมี Authentication เกิดขึ้น
ถ้า Un-comment debug: true จะเห็น Debug Output ช่วยดูว่า Cache ทำงานหรือไม่
Strapi ใช้ SQLite เป็น Default รัน In-process บน Development Computer จะเร็วกว่า Upstash Redis ที่ Deploy กิโลเมตรไกล ใน Production Environment กับ Real Database Server จะต่างออกไป
ทดสอบ Cache
หลัง Config ถูกต้อง Restart Dev Server:
yarn run develop
Server Up แล้ว เข้าถึงได้ที่ URL:
https://localhost:1337/api/articles
Database จะ Serve Request แรก Upstash Redis จะทำ Request ต่อไป
ข้อสรุป
เร่ง Strapi Deployment ใช้ไม่กี่นาทีกับ Upstash Redis Upstash Console ให้ URL วางใน Config ได้เลย เสร็จสิ้น
Upstash Redis Database แรกฟรี ลองดู ไม่ต้อง Credit Card!