我使用strapi + MySQL + GraphQL来构建了一个Docker本地环境的[环境搭建]
由于这是我第一次投稿,所以请温柔地对待任何拼写和打字错误(?)
因为今次有机会接触HeadlessCMS,所以尝试了一下strapi。
除了strapi,我还试了几个其他的,希望之后能写成文章。
另外,这次没有提到与前端的协作,所以之后也想写一篇关于那方面的文章。
请提供网页链接
-
- 公式サイト
-
- 公式Github
- Qiita「Strapi (Headless CMS)を使ってみたので使い方まとめ + GraphQL」
首先
无头CMS (Headless CMS) 是什么。
因为在 microCMS 的工程师博客中有相关内容,所以引用了与本次使用的 HeadlessCMS 不同的信息。
「ヘッドレス」一詞中的「ヘッド」指的是視圖(即要顯示的螢幕)。
因為是「ヘッドレス」,所以可以稱它為沒有視圖的CMS。
看起来是这样。
传统的CMS,例如WordPress,是由系统界面用于投稿内容和展示内容的界面组成的。
而HeadlessCMS则是没有展示内容界面的。
你对此有一点想法了吗?
如何显示内容?
与传统的内容管理系统不同,Headless CMS没有显示界面,因此可以通过API获取提交的内容。
不仅可以使用API,还可以使用GraphQL,并且不仅仅以传统的博客使用为目的,如果只是一个简单的数据库操作API,可以在管理界面上创建。在进行此操作时,我有以下想法:如果有数据库但还没有完成后端系统,可以创建一个简单的API,从而可以进行前端开发…?这种使用方式似乎是可行的。
本次结构
Strapi 是一个与 MySQL 和 GraphQL 集成的框架。
在进行此次调查时,我们需要能够在MySQL + GraphQL中使用,所以我们寻找了适用的解决方案。作为strapi,它也可以在Postgres或SQLite等环境中使用,请根据您自己的环境选择使用。另外,虽然我们使用GraphQL,但通常会使用RestAPI,所以请根据您希望使用的环境来选择使用!
环境建设
本次使用的环境
MacBookPro: macOS 卡塔利娜10.15.5
准备 Docker
请准备好Docker for Mac(如果是Windows或Linux系统,请对应更换)。只需能执行docker命令即可!
因为在公式的Github上,已经设置好了配置,所以我会直接使用它。(由于我仍在学习Docker,所以无法详细解释。)
每个数据库的docker-compose.yml文件
由于我需要使用MySQL,所以我将使用MySQL文件夹中的yml文件。
version: '3'
services:
strapi:
container_name: strapi
image: strapi/strapi
environment:
- DATABASE_CLIENT=mysql
- DATABASE_HOST=db
- DATABASE_PORT=3306
- DATABASE_NAME=strapi
- DATABASE_USERNAME=strapi
- DATABASE_PASSWORD=strapi
ports:
- 1337:1337
volumes:
- ./app:/srv/app
depends_on:
- db
db:
container_name: mysql
image: mysql:5.7
restart: always
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_DATABASE: strapi
MYSQL_USER: strapi
MYSQL_PASSWORD: strapi
MYSQL_ROOT_PASSWORD: strapi
volumes:
- ./db:/var/lib/mysql
创建Docker容器
如果文件准备好了,就创建容器。
如果没有特别的要求,请查看README中的说明并执行命令。
$ docker-compose up
GraphQL的安装
如果能够做到这一点,接下来就准备使用GraphQL。
$ docker exec -it strapi /bin/bash
进入Docker容器并输入以下命令。
$ strapi install graphql
稍等片刻,GraphQL的安装即将完成。
http://localhost:1337/graphql 可以用本地地址访问GraphQL。
当您访问该网页时,会出现类似这样的界面。
环境搭建已经完成。
试试看实际使用一下
创建表格
在初始的登录界面,随便选择就可以了(请考虑有验证功能)
然后启动仪表盘,选择插件的内容类型构建器
选择后,选择创建新的集合类型。
因为这将成为数据库表,所以请设置任意的表名。
随后转移到列的设置。
我认为有写过SQL的人应该可以大致想象出如何设置列,所以我忽略了列的设置。
暂时先只设置了文本。
你可以根据需要自由地设置表的关系等。
完成后,点击仪表盘右上角的保存按钮,完成表格的创建。
生成数据
当服务器重新启动后,您可以在仪表板菜单中找到刚刚创建的表格。
现在选择它,将显示当前注册的数据(初次登录可能不会显示任何内容)。
当您选择右上方的添加按钮时,您将跳转到数据添加页面。
当您添加数据时,数据将会显示在数据显示界面上。
在本例中,由于只有一个自定义列,所以稍微有点不同,但如果有多个列,则会显示相应的注册界面。
此外,ID和注册日期等会自动设置,所以如果您想使用,请使用已有的内容。
API的公开设置
我已经注册了数据,但是现在无法使用API。
下一步我将进行API的公开设置。
请在仪表盘菜单中选择“插件→角色和权限”。
从那里选择”Public”。
如果选择”Public”,则在下方可能有权限设置。
您可以在每个表上设置允许的权限。
请设置所需的权限,例如允许使用find进行全文搜索,允许使用findone进行单项搜索。
如果选择右上方的“保存”按钮,API就可以使用了。使用方法可能显示在右侧的灰色区域中。在我的环境中,表的名称是“Content”,因此可以通过以下URL使用find方法。
http://localhost:1337/contents 的中文释义
当您通过浏览器访问时,看起来就是这样。
[
{
"id": 1,
"Title": "Sample",
"created_at": "2020-07-16T03:26:19.000Z",
"updated_at": "2020-07-16T03:26:19.000Z"
}
]
现在可以提取数据了。
如果是从屏幕一侧使用的话,我想需要使用ajax等方式来获取。
此外,由于有更新和删除的权限,所以请仅允许使用所需的权限。
尝试使用GraphQL
现在,我们来尝试使用GraphQL进行搜索处理。
http://本地主机:1337/graphql
请访问这里。
关于GraphQL的使用方法,请务必自行调查一下。
(我也不是很清楚,所以……)
这次我设置了以下查询。
query findContents {
contents {
id
Title
}
}
按下类似于重新播放按钮的三角形按钮,就可以得到以下的结果。
现在可以使用GraphQL了,只需注册要使用的实际数据并显示在屏幕上即可。
总结
这次我尝试创建了服务器端环境。
作为一个没有使用过服务器端语言的人来说,我觉得这样简单地创建数据非常方便。
如果有精力的话,我希望能够整理出下一步要在前台实际显示的内容。