Nếu bạn đang tìm hiểu kiến trúc headless (CMS không đầu — tách phần quản trị nội dung khỏi phần hiển thị) trên nền Drupal, cái tên Contenta CMS sẽ xuất hiện rất sớm. Bài này giải thích Contenta thực chất là gì, nó khác một dự án headless viết bằng Node ra sao, và một điều quan trọng bạn cần biết trước khi định dùng nó cho dự án mới.
Contenta CMS thực chất là một bản phân phối Drupal
Drupal là một hệ quản trị nội dung (CMS) mã nguồn mở viết bằng PHP. Một “bản phân phối” (distribution) của Drupal không phải là phần mềm riêng — nó là chính Drupal nhưng được gói sẵn kèm một bộ module và cấu hình cho một mục đích cụ thể, để bạn cài một lần là có ngay môi trường làm việc thay vì tự lắp ráp từ đầu.
Contenta CMS chính là một bản phân phối như vậy, gói sẵn cho mục đích duy nhất: làm Drupal theo kiểu decoupled (tách rời — backend và frontend không dính nhau). Khi cài Contenta, bạn nhận được một Drupal đã bật sẵn module phơi dữ liệu qua API, kèm nội dung mẫu (demo content) và vài ứng dụng frontend mẫu để bạn thấy ngay cách một site headless vận hành. Toàn bộ phần backend, lớp dữ liệu, cơ chế phân quyền vẫn là Drupal nguyên bản — Contenta chỉ thêm cấu hình và ví dụ lên trên.

API-first và JSON:API hoạt động thế nào ở đây
Điểm khác biệt cốt lõi của Contenta nằm ở chữ “API-first” (ưu tiên API — coi việc phơi dữ liệu qua API là mặc định, không phải tính năng gắn thêm). Thay vì Drupal vừa giữ dữ liệu vừa tự dựng trang HTML như cách dùng truyền thống, Contenta cấu hình để Drupal phơi mọi nội dung dưới dạng dữ liệu thuần qua chuẩn JSON:API (một quy ước chuẩn hoá cách một API trả về dữ liệu JSON).
Cơ chế thường thấy như sau:
- Người biên tập vẫn vào giao diện quản trị Drupal để soạn bài, gắn ảnh, đặt phân loại — y như Drupal bình thường.
- Mỗi nội dung được Drupal tự động phơi ra thành một endpoint (điểm truy cập — một địa chỉ URL trả về dữ liệu) theo chuẩn JSON:API.
- Một frontend riêng (viết bằng React, Vue, Next.js, Gatsby… tuỳ bạn chọn) gọi về các endpoint đó, nhận JSON rồi tự dựng giao diện hiển thị cho người dùng.
Nhờ vậy, một backend Contenta có thể cấp dữ liệu cùng lúc cho nhiều “đầu” hiển thị: một website, một ứng dụng di động, một màn hình hiển thị… mà không phải nhân bản nội dung.
Contenta khác Strapi hay Directus ở chỗ nào
Đây là điểm hay gây nhầm. Nhiều headless CMS phổ biến hiện nay chạy trên nền Node.js, còn Contenta khác hẳn về gốc rễ:
| Tiêu chí | Contenta CMS | Strapi / Directus |
|---|---|---|
| Nền tảng | Drupal (PHP) | Node.js (JavaScript) |
| Bản chất | Bản phân phối cấu hình sẵn của một CMS có sẵn | Headless CMS độc lập, viết riêng |
| Chuẩn API | JSON:API (theo chuẩn Drupal core) | REST và/hoặc GraphQL riêng |
| Hợp với ai | Đội đã thạo Drupal | Đội quen hệ sinh thái JavaScript |
Nói ngắn gọn: nếu Strapi và Directus là những CMS headless dựng mới để cài lên Node, thì Contenta là cách đưa một Drupal sẵn có sang chế độ headless. Vì thế Contenta chỉ thực sự đáng cân nhắc khi đội của bạn vốn đã quen Drupal — phần backend, hosting, kỹ năng PHP đều nằm ở đó. Nếu bạn chưa từng đụng Drupal, học Strapi hay Directus thường nhẹ hơn nhiều. Hai cái tên này được trình bày kỹ trong bài về headless CMS Strapi trên nền Node và bài về Directus và cách bọc database thành API.
Điều quan trọng nhất: dự án đã ngừng phát triển
Đây là phần bạn cần biết trước khi định chọn Contenta cho một dự án mới. Contenta CMS ra mắt năm 2017, được xây trên Drupal 8. Bản phát hành cuối cùng dừng ở khoảng năm 2019, và đến tháng 4 năm 2024 kho mã nguồn (repository) trên GitHub đã được chuyển sang trạng thái lưu trữ (archived — chỉ đọc, không nhận thay đổi mới). Dự án hiện được đánh dấu deprecated (không khuyến nghị dùng nữa).
Lý do không phải vì ý tưởng sai, mà ngược lại: theo chính người duy trì, mục tiêu ban đầu của Contenta là một bản phân phối mang tính giáo dục, để demo cách làm decoupled Drupal đúng chuẩn. Theo thời gian, khả năng làm headless đã trở thành tính năng ổn định ngay trong Drupal core — module JSON:API giờ là một phần của Drupal lõi, bật lên là có endpoint mà gần như không cần cấu hình. Khi Drupal lõi đã làm được việc đó, một bản phân phối riêng để “dạy” cách làm headless không còn nhiều lý do tồn tại, và không có ai nhận tiếp vai trò duy trì.
Vậy hôm nay nên làm gì nếu muốn Drupal headless
Bài học từ Contenta vẫn còn nguyên giá trị, chỉ là cách triển khai đã đổi:
- Không nên cài Contenta cho dự án mới. Một bản phân phối dừng ở Drupal 8 đồng nghĩa với việc bạn không có bản vá bảo mật và phải tự gánh phần lệch so với Drupal hiện hành.
- Dùng thẳng Drupal hiện tại + JSON:API trong core. Đây gần như là cách Contenta từng làm, nhưng bạn được phiên bản mới nhất, có hỗ trợ và bản vá đầy đủ.
- Nếu đội không gắn với Drupal, các headless CMS nền Node như Strapi, Directus thường dễ bắt đầu hơn cho frontend JavaScript.
Dù chọn nền nào, phần khó nhất của một dự án headless thường không phải chọn CMS, mà là dựng đúng lớp frontend gọi API và phần hạ tầng đứng giữa. Nếu bạn muốn một website WordPress vận hành theo hướng tách rời backend và frontend, Web22 chuyên dựng kiểu CMS không đầu cho website trên nền WordPress và Next.js.

Câu hỏi thường gặp
Contenta CMS còn dùng được không?
Về mặt kỹ thuật vẫn cài được, nhưng không nên dùng cho dự án mới. Kho mã đã bị lưu trữ từ 2024 và dừng ở Drupal 8, nghĩa là không còn bản vá bảo mật mới.
Contenta có phải một CMS riêng không?
Không. Nó là một bản phân phối của Drupal — vẫn là Drupal, chỉ được gói sẵn cấu hình API-first kèm nội dung và frontend mẫu.
Muốn làm Drupal headless bây giờ thì bắt đầu từ đâu?
Cài Drupal phiên bản hiện hành rồi bật module JSON:API có sẵn trong core. Đó chính là điều Contenta từng đóng gói, nhưng nay đã là tính năng tiêu chuẩn của Drupal.
Nếu bạn thấy phần dựng frontend và hạ tầng quá nhiều việc và chỉ cần một website hoàn chỉnh, Web22 có thể thiết kế website trọn gói rồi bàn giao chạy luôn.
