最近在外國正盛行的無頭 CMS (Headless CMS),到底有什麼好處呢?跟我們常用的 CMS 又有什麼分別呢?

什麼是 Headless CMS?

傳統 CMS 好像著名的 Wordpress,Drupal,Ghost 等等都包括Front-end UI,也有 Theme 的部份,形成前後台合一的情況。而 Headless 的無頭就是不包括 Front-end,做一個純粹的 Backend CMS,輸出 API 給 Front-end 去讀取資料,不用再找 CMS 專用的 Theme 了,因為前後己經分離,所有 Front-end 只需看 API 就可以。

Headless CMS 的好處

因為後台變成獨立運作,所以對 Front-end 有什麼改動,只要 data 沒有變動就不在改 Backend,只需一個 Front-end Developer 就成。Front-end 也不用受 CMS 的 Theme所限制,即使整個 Front-end 砍掉重寫的成本也大減,資料也不用重入。

Headless CMS 的壞處

對不熟悉開發的用家來說需要自己動手去寫 Front-end 也許會更麻煩,沒有限制但也沒有一手按即用的插件,也不能作實時 Front-end 編輯,所以對低階用家可能更難使用。

Headless CMS 的選擇

現時 Headless CMS 有不少 Open Source 開源供下載,在試用過數隻 Open Source 的 CMS 後,決定了就做用 [strapi] (https://strapi.io/) 做我的最終選擇,但是為什麼呢?

簡單來說就是付合了我的要求

  • 自由度高
  • 使用 Nodejs 為主
  • Backend UX/UI 不錯
  • 設定簡單
  • 可以輸出成 API 或 GraphQL

雖然曾經用 Express + MongoDB 來寫成 API,但要寫成可以隨時更改結構的 API 太大 workload,會把我原本想做的東西都忘了,所以就用一個可以輸出成 API 的 CMS,就可以集中精神來寫 Frontend 了。

strapi 我由測試版開始試用,剛開始時 bug 真的很多,動不動就會 crash,但是正式版上線後,官方快速地修正了大量 bug,並持續增加新功能及改善 backend 的設計。有多個本來令我困惑的位置也在正式版修正了,令我這篇文章終於可以 post 出來(因為之前一直沒下決定使用哪家)。

雖然 strapi 很簡單,但我也會寫一篇用 docker 來設定 strapi 的新手使用教學,敬請期待。