Apostrophe是一个开源内容管理系统(CMS)和网站构建器,构建了JavaScript。除了传统CMS技术提供的功能外,撇号还可以配置为无头CM。无头CMS允许开发人员在多种格式和设备上管理和重复使用内容,而无需与特定的输出格式相关。它将内容层与演示层分开。
由于其内置的RESTFUL API端点,开发人员可以通过简单的HTTP调用来创建,检索,更新和删除(CRUD)内容。在这里,您将了解什么端点撇号曝光以及如何使用它们!
让我们潜水!
撇号是无头的CMS吗?
简短答案:是,撇号是无头的CMS!更具体地说,它也是无头CM的。
postrophe是基于Node.js和vue.js的全堆栈内容管理系统,为构建网站,Web应用程序和数字体验提供了强大的平台。最重要的是,它具有先进的内置无头功能。
这意味着编辑和设计师可以利用传统CMS(例如WordPress)的所有好处。同时,开发人员可以通过API与内容和媒体进行交互,例如内容。查看我们的Contentful vs Apostrophe文章以获取更多详细信息。
用撇号获得两个世界中的最好!
将撇号设置为无头CMS
在此分步部分中,您将学习如何开始使用撇号并将其配置为无头CMS。如果您已经有一个脱骨postrophecms项目,则可以跳过前三个子章节,然后直接进入最后一个。
初始化撇号项目
首先,请确保您在机器上安装了MongoDB和latest LTS version of Node。然后,启动下面的命令以安装Apostrophe CLI:
npm install -g @apostrophecms/cli
现在,您可以使用:
创建一个新的撇号项目
apos create apos-app
命令将负责安装所需的依赖项并引导您完成初始化过程。
参考Setting Up
官方文件的指南,以防需要。
定义作品类型
在撇号中,piece type代表了现实世界内容实体的模型。具体而言,它包含定义CMS中独立内容所需的所有字段属性。在这里,您将学习如何设置article
件类型。请记住,内容建模取决于您的应用程序域,因此请根据您的需求调整示例。
要在撇号中创建一个新作品,您需要添加一个扩展@apostrophecms/piece-type
的module。您可以使用official CLI命令为article
类型生成启动代码:
apos add piece article
在modules
文件夹中,您现在将拥有一个包含以下index.js
文件的article
目录:
// modules/article/index.js
module.exports = {
extend: '@apostrophecms/piece-type',
options: {
label: 'Article',
// Additionally add a `pluralLabel` option if needed.
},
fields: {
add: {},
group: {}
}
};
如果您不想使用撇号CLI,则可以手动初始化此JavaScript文件。默认情况下,没有额外配置的件类型具有title
,slug
和visibility
字段。
您可以通过更新index.js
来为博客文章定义适当的模型:
// modules/article/index.js
module.exports = {
extend: '@apostrophecms/piece-type',
options: {
label: 'Article'
// Additionally add a `pluralLabel` option if needed.
},
fields: {
add: {
image: {
label: 'Featured image',
type: 'area',
options: {
max: 1,
widgets: {
'@apostrophecms/image': {}
}
}
},
content: {
label: 'Content',
type: 'area',
options: {
widgets: {
// enable the rich-text editor
'@apostrophecms/rich-text': {},
// allow multimedia files
'@apostrophecms/image': {},
'@apostrophecms/video': {}
}
}
}
},
group: {
basics: {
label: 'Basics',
fields: [ 'title', 'content', 'image' ]
}
}
}
};
fields
对象应涉及以下两个属性:
-
add
:定义内容类型的属性 -
group
:指定属性输入如何在UI中的选项卡中分组 然后,在app.js
的modules
字段中注册新件类型:
// app.js
require('apostrophe')({
shortName: 'my-blog',
modules: {
article: {},
// remaining configs ...
}
});
太好了!这就是内容建模在脱发中的工作方式!阅读我们的学习指南how to build a blog in Apostrophe。
创建一些作品
特定作品类型的各个记录称为阿iaqian15。
是时候创建一些内容了。在管理UI中,单击顶部菜单中的文章按钮。
然后,单击新文章以打开以下模式:
填写表格,然后单击发布按钮以创建新文章。重复此过程以生成更多内容。
对项目中的所有其他类型做同样的事情。
您可以看到,撇号中的内容简单而直观。任何人都可以做到,甚至是非技术用户。现在,让我们学习如何通过API公开访问此内容。
撇号无头CMS API
撇号自动为每种类型的类型揭露了几个宁静的端点。这意味着该工具具有内置的无头CMS功能,并且您不需要额外的配置即可启用此功能。
是时候看到撇号在作用中提供的最常见的无头端点了。为了测试您将在本节中看到的示例API调用,建议使用HTTP客户端。邮递员或失眠会。
查看文档以探索all API endpoints available!
API身份验证
撇号带有几种API身份验证方法,包括API keys,bearer tokens和session cookies。在这里,我们将重点关注携带者令牌。由于它们与一个帐户相关联,因此它们代表了浏览器使用和无头应用程序的最合适选项。
要获得有效的携带者身份验证令牌,请在JSON主体中使用username
和username
和password
执行POST
请求:
{
"username": "<YOUR_USERNAME>",
"password": "<YOUR_PASSWORD>"
}
如果登录凭据正确,postrophe将使用一个json对象响应,包括token
属性:
{
"token": "clhj8xkji0004y0ff0jjl9zx9"
}
将服务器返回的携带者令牌存储在安全的地方。您可以使用它来访问需要登录的API,通过在请求的HTTP [Authorization] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization)
标头中指定它:
Bearer <YOUR_BEARER_TOKEN>
看一下documentation以探索可用的其他身份验证方法。
公开API端点
默认情况下,只有身份验证的用户才能访问Apostrophe REST API。但是,您可以选择允许使用[publicApiProjection] (https://v3.docs.apostrophecms.org/reference/api/authentication.html#allowing-public-access)
选项公开访问的特定部分的HTTP GET
端点:
// modules/article/index.js
module.exports = {
extend: '@apostrophecms/piece-type',
options: {
label: 'Article',
publicApiProjection: {
title: 1,
slug: 1,
image: 1
},
// other options...
},
fields: {
// omitted for brevity...
}
};
此选项使您可以通过在publicApiProjection
对象中添加或省略GET
端点返回的字段。请注意,这仅适用于未经身份验证的用户。身份验证的用户将始终收到所有可用的数据。
另外,如果您想为Spa提供通过GET
端点访问零件类型中的所有字段的能力,而无需其他Crud特权,则可以通过guestApiAccess选项进行操作。这为登录的访客用户提供了无编辑特权full GET
访问。
请记住,这确实意味着用户必须通过我们的携带者令牌API登录。因此,它非常适合需要用户注册的站点,例如使用我们的 @apostrophecms-pro/Ingiup模块,并可能付款以访问具有“登录所需”标志的内容。但是,如果您希望全世界看到您的内容,请改用publicApiProjection
。
您可以为特定部分启用此配置,如下所示:
// modules/article/index.js
module.exports = {
extend: '@apostrophecms/piece-type',
options: {
label: 'Article',
guestApiAccess: true
// other options...
},
fields: {
// omitted for brevity...
}
};
取回所有碎片
您可以使用[GET /api/v1/:piece-type-name] (https://v3.docs.apostrophecms.org/reference/api/pieces.html#get-api-v1-piece-name)
端点以分页的方式获取特定件类型的所有记录。
例如,您可以将所有文章带有GET
请求到/api/v1/article
。
撇号将以以下格式产生分页的response:
{
"pages": 1,
"currentPage": 1,
"results": [
{
"_id": "clhj5wwoi0031bwffh65df6ga:en:published",
"slug": "failure-key-to-success",
"title": "Why Failure is the Key to Success: Lessons from Famous Failures",
"image": {
// ...
},
"cacheInvalidatedAt": "2023-05-11T13:25:36.568Z"
},
// ...
{
"_id": "clhj5mp8g0017bwff6bkf9t57:en:published",
"slug": "benefits-traveling-alone",
"title": "5 Surprising Benefits of Traveling Alone",
"image": {
// ...
},
"cacheInvalidatedAt": "2023-05-11T13:17:40.524Z"
}
]
}
如果您选择使用publicApiProjection
选项并且不存在携带者令牌,则results
中的实体将仅包括配置对象中指定的属性。
results
仅包含前10个元素,也称为第一页。您可以通过指定page
查询参数访问其他页面,如下示例:
http://localhost:3000/api/v1/article?page=2
您现在还可以访问content
字段。
取回特定的作品
您可以使用[GET /api/v1/:piece-type-name/:_id] (https://v3.docs.apostrophecms.org/reference/api/pieces.html#get-api-v1-piece-name-id)
API检索_id
的特定作品。
例如,您可以使用:
获得clhj5wwoi0031bwffh65df6ga:en:published
文章
http://localhost:3000/api/v1/article/clhj5wwoi0031bwffh65df6ga:en:published
撇号将产生一个平坦的JSON对象,该对象包含与指定物品关联的所有属性。如果有一些丢失的数据,它将返回[404 Not Found] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404)
错误响应。
过滤一些碎片
撇号允许您通过某些special query parameters过滤分页的GET
端点的结果。例如,您可以获取所有包含“幸福”一词的文章:
http://localhost:3000/api/v1/article?search=happiness
多亏了这些参数,您也可以获取本地化并起草内容。请注意,获得草稿需要认证。
创建新作品
您可以通过将所有必需字段传递给[POST /api/v1/:piece-name] (https://v3.docs.apostrophecms.org/reference/api/pieces.html#post-api-v1-piece-name)
端点的JSON主体来创建一个新零件。
例如,您可以如下图中插入一篇新文章:
默认情况下,Apostrophe将发布内容并返回其属性,包括_id
。要创建草稿,请在请求中指定aposMode=draft
查询参数。
如果某些缺少必需的字段,服务器将使用[422 Unprocessable Content] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/422)
错误响应。
更新一件
与上面类似,您可以使用[PUT /api/v1/:piece-name/:_id] (https://v3.docs.apostrophecms.org/reference/api/pieces.html#put-api-v1-piece-name-id)
API更新一件。主要区别在于,您还必须在端点中指定现有部分的_id
。
如果您省略了JSON主体中的字段,则将恢复为默认值。要部分更新部分的某些属性,请使用[PATCH /api/v1/:piece-name/:_id] (https://v3.docs.apostrophecms.org/reference/api/pieces.html#patch-api-v1-piece-name-id)
端点。
删除现有作品
要删除一块,在[DELETE /api/v1/:piece-name/:_id] (https://v3.docs.apostrophecms.org/reference/api/pieces.html#delete-api-v1-piece-name-id)
端点中指定其_id
。
例如,您可以通过下面的DELETE
请求删除clhj5wwoi0031bwffh65df6ga:en:published
文章:
http://localhost:3000/api/v1/article/clhj5wwoi0031bwffh65df6ga:en:published
其他API
除了件类型REST API外,Apostrophe还提供:
- Page type REST API:提供用于创建,阅读,更新和删除page对象的端点。它需要身份验证,对于在撇号站点内管理页面很有用。
- Media API:露出端点以在图像,视频和文件上执行CRUD操作。这使您可以上传新的媒体文件并检索,替换和下载现有文件。 使用撇号,无头的可能性无尽!
结论
在本文中,我们将撇号视为无头CM,其内容API提供了什么以及如何访问它们。详细说明,撇号是CMS和网站构建器,也具有无头功能。这使其成为极其灵活的工具。
逐步逐步教程后,您学习了如何将撇号用作无头CM,探索其API并检索或发布内容。如这里所证明的那样,Apostrophe允许您使用仅几行代码创建一个完整的无头CM。