Strapi

20th August 2020 at 2:19pm
Headless CMS

我是在 2020 年 5 月体验的 3.0.0-beta 版。

使用流程

用 strapi 的 CLI 生成一个项目后运行它。在 Content-Types Builder 建立一些模型:

建立时,strapi 后台做了这样的事情:

  • 为你的 content-type 生成一系列的代码,比如 model 定义文件、API 路由、OpenAPI 文档等
  • 重启自己

下面这张图中的 api 目录,即是 strapi 用来存放生成的文件:

然后它自动提供了最基础的 RESTful 接口,以及可以使用 GraphQL 进行查询。

它也有素材管理的功能(Media Library),但我使用下来觉得 功能太简单了,连建目录、选 tag 都做不了,别说对素材做版本管理了。

好处与不足之处

对于 Content-Types Builder:

  • 优点:
    • 简单易用,不需要手写代码就可生成 models
    • 内置了富文本编辑器
    • 关系的指定非常简单明了
  • 缺点:
    • 字段的类型不够多,比如 Django 提供了 DurationField 来表示时长,strapi 就没有;意味着你需要用数字来存储时长,并且写额外的代码将其序列化成 00:01:32 格式
    • 能配置的数据格式校验不多,可能需要额外写代码实现

对于 RESTful API:

  • 优点:自动生成 API endpoint 及文档
  • 缺点:默认的 RESTful 只会输出一层的关系,如果要实现多层关系一起输出,或者额外的逻辑,可能需要写代码

对于素材管理(Media Library):

  • 优点:上传界面简单直观
  • 缺点:
    • 没有提供第三方存储(如 Amazon S3、各种云服务对象存储)的选择,目前只能存在 strapi 服务器的 uploads 目录中
    • 功能太简单了,无法建目录、无法标 tag,更没有版本管理

对于用户注册、登陆:

  • 优点:
    • 提供了现成的 API 去注册和登陆
    • 可以与社交网络账号关联,比如 Google、Facebook
    • 提供了注册时邮箱确认、重置密码时邮箱找回的能力
  • 缺点:
    • 整套流程过于简单,真实的账号系统可能会更复杂
    • 可扩展性差,比如如果你想在注册时显示一验证码,那并不是很容易在这里做到

权限管理:跟 Django 差不多,可以针对不同的 model 做细分的操作权限设置。

总结

如果你的产品是内容型的,并且内容生产是站方提供而不是用户提供,那么 strapi 可能是个不错的选择,毕竟你不需要花太多心思就能构建一个可发布内容的后台系统,而不太需要考虑新增内容时的字段校验。如果涉及到用户提供内容,那你可能需要写额外的代码逻辑去处理(比如格式校验、文件上传等等),这使得它跟其他的 web 框架没太多区别。