我们的系统架构很单纯,分为托管在 Vercel 上的 Next.js 前端,以及托管在 BlueHost 上的 WordPress 後端 CMS。
而前後端之间要沟通,最常见的做法就是後端开 API 让前端去呼叫,前端透过 API 抓取後端 CMS 上的文章资料,来呈现在前端画面上。
那麽 WordPress 要怎麽开 API 呢?现在网路世界里最普遍的 API 格式叫做 RESTful API,WordPress 内建就有 RESTful API 可以直接呼叫,来取得各种资料。但在这系列里,我们会用一套更新颖的 API 格式,叫做 GraphQL。
GraphQL 是一套 API 格式,由 Facebook 在 2015 年开源出来让大家可以使用。GraphQL 跟 RESTful API 一样是基於 HTTP request 来做资料交换,但在後端开发和前端串接上都有优於 RESTful 的地方。
如同上图 GraphQL 官网所描述的架构一样,左边第一区块「Describe your data」描述的是後端建立 API 的方式。後端不再需要针对每个使用情境独立开设 API endpoint 与撰写逻辑,而仅需要安装 GraphQL server,定义好一个 schema.json 档案,描述资料库的型别、及各型别之间如何连结,That's it!GraphQL API 就开好了。虽然仅有一个 endpoint,但支援了无数种呼叫方式,取代了过往几十、几百条的 RESTful API,大幅减轻後端开发 loading。
一样是上图的中间和左边区块,则描述了前端如何使用 GraphQL API。前端在 query 的时候都是针对那唯一的 endpoint 发送 POST request,但是参数里面会携带如同中间图片格式的 query string,代表了这次 API call 的意图,跟 API 讲说前端我现在需要哪些栏位的资料,API 便会回传对应格式的 JSON response,包含了不多也不少、刚刚好的资料。
这对前端来说有几个意义:
所以我们在这系列文章会采用 GraphQL 作为 API 格式。接下来让我们在 WordPress 启用 GraphQL。
WordPress 内建没有支援 GraphQL API,需要装 plugin,最热门的是 WPGraphQL 这套。让我们把它装起来吧!
在 WordPress 安装 plugin 有两种方法,热门的 plugin 通常是在 plugin market 页面搜寻,点击安装按钮装起来,比较冷门的就要上 Github 之类的网站找到 zip 档,上传到 WordPress。
这里 WPGraphQL 很热门,因此我们直接在 plugin market 上搜寻,并点击「Install now」按钮把它装起来。按下去後这个画面不要马上关掉,等他安装完後,原本按钮会变成「Activate」,要再点一下 Activate 把它启用,才会生效
启用完後,画面最上面会多一个 GraphiQL IDE 按钮,有看到的话就算安装成功了!可以点进去玩一下。点进去後画面如下:
我们不需要做任何设定,WPGraphQL 自动就会知道 WordPress 会有哪些型别,自动建好所有 Schema,画面左边 Explorer 就列出了所有我们能用的 Schema,代表了所有能 query 的资料。系列文章後面我们还会讲要如何增加型别做客制化,这边基本的就很够用了。
GraphiQL IDE 是一个互动式开发工具,在这边浏览到你需要的型别和栏位後,可以直接在需要的栏位打勾,中间就会自动产生出对应的 query string,後续就可以将此 query string 贴到 Next.js 里面使用。这边我们先在 GraphiQL IDE 操作看看就好。
最常用的操作就是取得文章列表,於是我们在左边 Explorer 找到 posts 打勾他,并且把它展开来,继续展开 nodes 层,再继续往下把想看的栏位打勾,以这张图的话我打勾了 slug、title、uri、id、date 栏位,完成以後按上面长得像播放键的按钮,就会根据这个 query string 实际抓资料出来,右边就能看到 response 的 JSON,就能确实看到我撰写的文章的对应栏位
恭喜你学会如何在 WordPress 上操作 GraphQL 了!下一篇文章我们接着来用 Next.js 串接 GraphQL API!
<<: [Day18] - 在 React 中引用现成的 Web Component
>>: [Day 17] 实作 Ktor OpenAPI Generator
Day 29 - Android Studio 这几天以来的统整 离我们铁人完赛只剩一天了,我今天就...
今天要继续讲转职工作使用到的工具以及遇到的一些问题及处理方式。 公司的专案在制作图表有使用到Cube...
今天来谈谈 SOLID 当中的里氏替换原则,同样的先来看一下例子。 延续先前的例子,公司持续拓展,满...
舒安表示:我的手机是有高画质的,不过这影片的4K片段是用相机拍出来的。 半年前,在蓝象廷用餐时,因为...
如果一个阵列中的任两个元素是有排序的,是不是代表整个阵列就是排序好的? 这就是泡沫排序的想法。 如果...