如何将撇号用作无头CM
#javascript #网络开发人员 #教程 #howto

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项目,则可以跳过前三个子章节,然后直接进入最后一个。

初始化撇号项目

首先,请确保您在机器上安装了MongoDBlatest LTS version of Node。然后,启动下面的命令以安装Apostrophe CLI

npm install -g @apostrophecms/cli

现在,您可以使用:
创建一个新的撇号项目

apos create apos-app

命令将负责安装所需的依赖项并引导您完成初始化过程。

参考Setting Up
官方文件的指南,以防需要。

定义作品类型

在撇号中,piece type代表了现实世界内容实体的模型。具体而言,它包含定义CMS中独立内容所需的所有字段属性。在这里,您将学习如何设置article件类型。请记住,内容建模取决于您的应用程序域,因此请根据您的需求调整示例。

要在撇号中创建一个新作品,您需要添加一个扩展@apostrophecms/piece-typemodule。您可以使用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文件。默认情况下,没有额外配置的件类型具有titleslugvisibility字段。

您可以通过更新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.jsmodules字段中注册新件类型:
// app.js

require('apostrophe')({
  shortName: 'my-blog',
  modules: {
    article: {},
    // remaining configs ...
  }
});

太好了!这就是内容建模在脱发中的工作方式!阅读我们的学习指南how to build a blog in Apostrophe

创建一些作品

特定作品类型的各个记录称为阿iaqian15。

是时候创建一些内容了。在管理UI中,单击顶部菜单中的文章按钮。

article headless cms

然后,单击新文章以打开以下模式:

new article headless cms

填写表格,然后单击发布按钮以创建新文章。重复此过程以生成更多内容。

对项目中的所有其他类型做同样的事情。

您可以看到,撇号中的内容简单而直观。任何人都可以做到,甚至是非技术用户。现在,让我们学习如何通过API公开访问此内容。

撇号无头CMS API

撇号自动为每种类型的类型揭露了几个宁静的端点。这意味着该工具具有内置的无头CMS功能,并且您不需要额外的配置即可启用此功能。

是时候看到撇号在作用中提供的最常见的无头端点了。为了测试您将在本节中看到的示例API调用,建议使用HTTP客户端。邮递员或失眠会。

查看文档以探索all API endpoints available

API身份验证

撇号带有几种API身份验证方法,包括API keysbearer tokenssession cookies。在这里,我们将重点关注携带者令牌。由于它们与一个帐户相关联,因此它们代表了浏览器使用和无头应用程序的最合适选项。

要获得有效的携带者身份验证令牌,请在JSON主体中使用usernameusernamepassword执行POST请求:

{
    "username": "<YOUR_USERNAME>",
    "password": "<YOUR_PASSWORD>"
}

authentication headless CMS

如果登录凭据正确,postrophe将使用一个json对象响应,包括token属性:

{
    "token": "clhj8xkji0004y0ff0jjl9zx9"
}

将服务器返回的携带者令牌存储在安全的地方。您可以使用它来访问需要登录的API,通过在请求的HTTP [Authorization] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization)标头中指定它:

Bearer <YOUR_BEARER_TOKEN>

bearer headless cms

看一下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

get api headless cms

撇号将以以下格式产生分页的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

retrieve page headless cms

您现在还可以访问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

query headless cms

撇号将产生一个平坦的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

insert new headless cms

多亏了这些参数,您也可以获取本地化并起草内容。请注意,获得草稿需要认证。

创建新作品

您可以通过将所有必需字段传递给[POST /api/v1/:piece-name] (https://v3.docs.apostrophecms.org/reference/api/pieces.html#post-api-v1-piece-name)端点的JSON主体来创建一个新零件。

例如,您可以如下图中插入一篇新文章:

delete piece headless cms

默认情况下,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

delete piece headless cms

其他API

除了件类型REST API外,Apostrophe还提供:

  • Page type REST API:提供用于创建,阅读,更新和删除page对象的端点。它需要身份验证,对于在撇号站点内管理页面很有用。
  • Media API:露出端点以在图像,视频和文件上执行CRUD操作。这使您可以上传新的媒体文件并检索,替换和下载现有文件。 使用撇号,无头的可能性无尽!

结论

在本文中,我们将撇号视为无头CM,其内容API提供了什么以及如何访问它们。详细说明,撇号是CMS和网站构建器,也具有无头功能。这使其成为极其灵活的工具。

逐步逐步教程后,您学习了如何将撇号用作无头CM,探索其API并检索或发布内容。如这里所证明的那样,Apostrophe允许您使用仅几行代码创建一个完整的无头CM。