如何开始使用restdb.io并创建一个简单的CMS

如何开始使用restdb.io并创建一个简单的CMS

本文由restdb.io赞助。 感谢您支持使SitePoint成为可能的合作伙伴。

数据库使恐惧成为最有经验的开发人员的心。 安装,更新,磁盘空间供应,备份,高效索引,优化查询和扩展是大多数人无法解决的问题。 大型组织将聘请知识渊博的开发人员,将他们的一生奉献给数据库问题。 然而,该系统在他们休假的那一刻不可避免地会失败。

一个更实用的选择是将数据库外包,这正是restdb.io提供的服务。 他们管理棘手的数据存储恶作剧,使您可以专注于更紧急的开发任务。

restdb.io:基础知识

restdb.io是一个即插即用的云NoSQL数据库。 任何具有MongoDB经验的人都会立即熟悉。 主要区别:

  • 无需管理您的安装,存储或备份
  • 您可以在restdb.io中定义数据结构模式
  • 数据字段可以与其他集合中的其他字段有关系
  • 无需定义索引
  • 可以通过通过HTTP或Auth0 / JWT令牌认证的REST API查询和更新数据
  • 查询和更新以JSON格式发送和接收
  • 有一些工具可以输入,查看和导出各种格式的数据
  • 它支持一些有趣的附加功能,例如代码钩,电子邮件,Web表单生成,网站,实时消息等。

免费帐户使您无需承担任何义务即可评估服务。 付费计划提供了额外的存储空间,查询吞吐量,开发人员帐户和MongoDB集成。

在以下各节中,我将描述如何:

  1. 配置一个新的数据库并输入数据
  2. 使用该数据来呈现在restdb.io上托管的一组网页,以及
  3. 使用API​​为内容编辑者提供搜索工具。

步骤1:创建一个新的数据库

使用Google,Facebook或电子邮件帐户注册后,您可以创建一个新的空数据库。 这将在yourdbname .restdb.io处生成一个新的API端点URL:

创建一个新的数据库

步骤2:建立新集合

数据库包含一个或多个用于存储数据的集合 。 这些类似于SQL数据库表。 集合包含类似于SQL数据库记录(表行)的“文档”

restdb.io接口提供两种模式:

  1. 标准模式显示可用的集合,并允许您插入和修改数据。
  2. 开发人员模式允许您创建和配置集合。

进入开发者模式

进入开发人员模式 (屏幕右上角),然后单击添加收藏夹按钮。

创建一个新集合

集合需要唯一的名称(我用过“ content”)以及可选的描述和图标。 点击保存返回到数据库概述。 “内容”集合将与其他几个不可编辑的系统集合一起出现在列表中。

或者,可以通过在标准视图中单击“ 导入” ,从Excel,CSV或JSON文件导入数据以创建集合。

步骤3:定义栏位

停留在开发人员模式下 ,单击“内容”集合,然后选择“ 字段”选项卡。 单击添加字段以添加和配置新字段,以对集合中的数据进行分类。

创建字段

每个收集文档都会使数据库驱动的网站中有关单个页面的数据疼痛。 我添加了五个字段:

  • slug –页面路径URL的文本字段
  • title-页面标题的文本字段
  • 正文 –页面内容的特殊markdown文本字段
  • image –一个特殊的image字段,它允许任意数量的已上传图像(也存储在restdb.io系统中)
  • 已发布 -布尔值,必须为true,页面才能公开显示。

步骤4:添加文档

可以以标准或开发人员模式(或通过API)将文档添加到集合中。 创建一些具有典型页面内容的文档:

建立文件

对于主页,该段应该为空。

步骤5:创建数据库驱动的网站(可选)

restdb.io提供了一个有趣的功能,可以使用集合中的数据文档来创建和托管数据库驱动的网站

该站点托管在www- yourdbname .restdb.io,但您可以在页面上指向任何域 。 有关说明,请单击数据库列表中或左侧面板底部的设置 ,然后单击虚拟主机选项卡。

要创建网站,必须在开发人员模式下配置页面,该页面定义用于查看内容的模板。 模板包含一个代码段,用于设置:

  1. 上下文 –在集合中找到正确文档的查询,以及
  2. HTML –一种使用车把模板语法将内容插入适当元素的结构。

单击添加页面以创建页面。 将其命名为特殊名称/:slug -这意味着该模板将应用于除主页(不带子弹)之外的任何URL。 点击保存并返回页面列表,然后单击/:slug条目进行编辑。

切换到“ 设置”标签,并确保输入文本/ html作为“ 内容类型”,并在单击“ 更新”之前选中“ 发布

创建页面

现在切换到“ /:slug”标签的代码 。 在编辑器顶部输入上下文代码:

{{#context}}
{
  "docs": {
    "collection": "content",
    "query": {
      "slug": "{{pathparams.slug}}",
      "published": true
    }
  }
}
{{/context}}

这定义了一个查询,以便模板可以访问我们的内容集中的特定文档。 在这种情况下,我们将获取与URL上传递的段匹配的已发布文档。

所有restdb.io查询都返回对象数组。 如果没有返回文档,则docs数组将为空,因此我们可以添加代码以返回该页面在上下文下方不可用:

<!doctype html>
{{#unless docs.[0]}}
  <html>
  <body>
    <h1>Page not available</h1>
    <p>Sorry, this page cannot be viewed. Please return later.</p>
  </body>
  </html>
{{/unless}}

在此之下,我们可以对模板进行编码,该模板将标题,正文和图像字段放入适当的HTML元素中:

{{#with docs.[0]}}
  <html>
  <head>
    <meta charset="utf-8">
    <title>{{title}}</title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <style>
      body {
        font-family: sans-serif;
        font-size: 100%;
        color: #333;
        background-color: #fff;
        max-width: 40em;
        padding: 0 2em;
        margin: 1em auto;
      }
    </style>
  </head>
  <body>
    <header>
      {{#each image}}
        <img src="https://sitepoint-fbbf.restdb.io/media/{{this}}" alt="image" />
      {{/each}}

      <h1>{{title}}</h1>
    </header>
    <main>
      {{markdown body}}

      <p><a href="/">Return to the home page...</a></p>
    </main>
  </body>
  </html>
{{/with}}

请注意,我们的markdown 正文字段必须使用markdown处理程序呈现。

使用Ctrl | Cmd + S或返回“ 设置”标签并点击更新来保存代码。

/:slug页面模板将应用于我们所有的内容集合-主页除外,因为它没有任何内容! 要渲染主页,请创建一个名称为home新页面 ,并具有相同的设置和内容。 您可能需要调整主页特定内容的模板。

保存后,您可以从https:// www- yourdbname .restdb.io /访问您的站点。 我在https://www-sitepoint-fbbf.restdb.io/上创建了一个非常简单的三页站点。

有关restdb.io页面托管的更多信息,请参考:

步骤6:API查询

创建一个站点来显示数据可能会很有用,但是您最终将需要构建一个查询和操纵信息的应用程序。

restdb.io的REST API提供了通过HTTP控制的端点:

  • HTTP GET请求从集合中检索数据
  • HTTP POST请求在集合中创建新文档
  • HTTP PUT请求更新集合中的文档
  • HTTP PATCH请求更新集合中文档中的一个或多个属性
  • HTTP DELETE请求从集合中删除文档

有许多用于处理上载的媒体文件,数据库元数据和邮件的API,但是您最常使用的API是用于收藏。 API URL为:

https:// yourdbname .restdb.io / rest / collection-name /

因此,我的“内容”集合的URL为:

https://sitepoint-fbbf.restdb.io/rest/content/

查询作为名为q的JSON编码查询字符串参数传递到此URL,例如,获取集合中所有已发布的文章:

https://sitepoint-fbbf.restdb.io/rest/content/q={"published": true}

但是,如果没有在x-apikey HTTP标头中传递API密钥,此查询将失败。 默认情况下提供完全访问API密钥,但建议创建仅限于特定操作的密钥。 在数据库的“设置” ,“ API”选项卡中:

RestDB API密钥

单击添加新以创建一个新的密钥。 我在这里创建的请求仅限于内容集合上的GET(查询)请求。 如果要使用客户端JavaScript Ajax代码,则应创建一个受类似限制的密钥,因为该字符串将在代码中可见。

现在可以构建一个独立的JavaScript查询处理程序(ES5已用于确保跨浏览器兼容性,而无需进行预编译!)

// restdb.io query handler
var restDB = (function() {

  // configure for your own DB
  var 
    api = 'https://sitepoint-fbbf.restdb.io/rest/',
    APIkey = '597dd2c7a63f5e835a5df8c4';

  // query the database
  function query(url, callback) {

    var timeout, xhr = new XMLHttpRequest();

    // set URL and headers
    xhr.open('GET', api + url);
    xhr.setRequestHeader('x-apikey', APIkey);
    xhr.setRequestHeader('content-type', 'application/json');
    xhr.setRequestHeader('cache-control', 'no-cache');

    // response handler
    xhr.onreadystatechange = function() {
      if (xhr.readyState !== 4) return;
      var err = (xhr.status !== 200), data = null;
      clearTimeout(timeout);
      if (!err) {
        try {
          data = JSON.parse(xhr.response);
        }
        catch(e) {
          err = true;
          data = xhr.response || null;
        }
      }
      callback(err, data);
    };

    // timeout
    timeout = setTimeout(function() {
      xhr.abort();
      callback(true, null);
    }, 10000);

    // start call
    xhr.send();
  }

  // public query method
  return {
    query: query
  };

})();

此代码将查询传递到restdb.io API端点,并设置适当的HTTP标头,包括API密钥的x-apikey 。 如果响应时间超过十秒,则会超时。 向回调函数传递错误,并将所有返回的数据作为本机对象传递。 例如:

// run a query
restDB.query(
  '/content?q={"published":true}',
  function(err, data) {
    // success!
    if (!err) console.log(data);
  }
);

控制台将从内容集合中输出一系列文档,例如

[
  {
    _id: "1111111111111111",
    slug: "",
    title: "Home page",
    body: "page content...",
    image: [],
    published: true
  },
  {
    _id: "22222222222222222",
    slug: "page-two",
    title: "Page Two",
    body: "page content...",
    image: [],
    published: true
  },
  {
    _id: "33333333333333333",
    slug: "page-three",
    title: "Another page",
    body: "page content...",
    image: [],
    published: true
  }
]

可以使用任何可以发出HTTP请求的语言来调用该API。 restdb.io提供了cURL,jQuery $ .ajax,JavaScript XMLHttpRequest,NodeJS,Python,PHP,Java,C#,Objective-C和Swift的示例

我在Codepen.io上创建了一个简单的示例,该示例使您可以在title和body字段中搜索字符串并显示结果:

见笔restdb.io查询由SitePoint( @SitePoint上) CodePen

它传递以下查询:

{ "$or": [
  { "title": {"$regex": "searchstring"} }, 
  { "body":  {"$regex": "searchstring"} }
]}

其中searchstring是用户输入的搜索文本。

附加的h querystring参数将返回的字段限制为只有子弹,标题和已发布标志:

{
  "$fields": {
    "slug": 1,
    "title": 1,
    "published": 1
  }
}

更多的信息:

步骤7:建立您自己的CMS

创建数据库驱动的网站和简单的搜索工具需要一些步骤。 您可以使用restdb.io的用户界面直接编辑页面,但是可以构建定制的CMS来处理内容。 它将要求:

  1. 一个新的restdb.io API密钥(或更改现有密钥),可以对内容集合进行适当的GET,POST,PUT,PATCH和DELETE访问。
  2. 一种用于浏览或搜索页面的用户界面(上面的一个可能是一个很好的起点)。
  3. 开始新页面或获取现有内容并将其置于可编辑形式的过程。
  4. 使用适当的HTTP方法添加,更新或删除页面的过程。

编辑系统应在受限设备上或登录后运行,以确保只有经过身份验证的用户才能访问。 如果使用客户端代码,请注意不要泄露您的restdb.io API密钥!

更多的信息:

立即尝试restdb.io!

本文使用restdb.io构建基本的CMS,但是该服务适用于需要数据存储的任何项目。 可以从任何语言或框架访问REST API,这使其非常适合具有多个接口的应用程序,例如Web和本机移动视图。

restdb.io提供了一种实用的替代方法来管理您自己的数据库软件安装。 它简单易用,快速,强大,可扩展性高,并且比雇用数据库专家便宜得多! 由于所有数据都安全地存储和备份在restdb.io服务器上,因此您的应用程序托管成本也将降低。

最后, restdb.io使您的工作效率更高 。 您可以专注于主应用程序,因为数据存储不再引起您和您的团队的担忧。

立即开始构建restdb.io数据库 ,让我们知道您的工作状况!

From: https://www.sitepoint.com/how-to-get-started-with-restdb-io-and-create-a-simple-cms/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值