本文由restdb.io赞助。 感谢您支持使SitePoint成为可能的合作伙伴。
数据库使恐惧成为最有经验的开发人员的心。 安装,更新,磁盘空间供应,备份,高效索引,优化查询和扩展是大多数人无法解决的问题。 大型组织将聘请知识渊博的开发人员,将他们的一生奉献给数据库问题。 然而,该系统在他们休假的那一刻不可避免地会失败。
一个更实用的选择是将数据库外包,这正是restdb.io提供的服务。 他们管理棘手的数据存储恶作剧,使您可以专注于更紧急的开发任务。
restdb.io:基础知识
restdb.io是一个即插即用的云NoSQL数据库。 任何具有MongoDB经验的人都会立即熟悉。 主要区别:
- 无需管理您的安装,存储或备份
- 您可以在restdb.io中定义数据结构模式
- 数据字段可以与其他集合中的其他字段有关系
- 无需定义索引
- 可以通过通过HTTP或Auth0 / JWT令牌认证的REST API查询和更新数据
- 查询和更新以JSON格式发送和接收
- 有一些工具可以输入,查看和导出各种格式的数据
- 它支持一些有趣的附加功能,例如代码钩,电子邮件,Web表单生成,网站,实时消息等。
免费帐户使您无需承担任何义务即可评估服务。 付费计划提供了额外的存储空间,查询吞吐量,开发人员帐户和MongoDB集成。
在以下各节中,我将描述如何:
- 配置一个新的数据库并输入数据
- 使用该数据来呈现在restdb.io上托管的一组网页,以及
- 使用API为内容编辑者提供搜索工具。
步骤1:创建一个新的数据库
使用Google,Facebook或电子邮件帐户注册后,您可以创建一个新的空数据库。 这将在yourdbname .restdb.io处生成一个新的API端点URL:
步骤2:建立新集合
数据库包含一个或多个用于存储数据的集合 。 这些类似于SQL数据库表。 集合包含类似于SQL数据库记录(表行)的“文档” 。
restdb.io接口提供两种模式:
- 标准模式显示可用的集合,并允许您插入和修改数据。
- 开发人员模式允许您创建和配置集合。
进入开发人员模式 (屏幕右上角),然后单击添加收藏夹按钮。
集合需要唯一的名称(我用过“ content”)以及可选的描述和图标。 点击保存返回到数据库概述。 “内容”集合将与其他几个不可编辑的系统集合一起出现在列表中。
或者,可以通过在标准视图中单击“ 导入” ,从Excel,CSV或JSON文件导入数据以创建集合。
步骤3:定义栏位
停留在开发人员模式下 ,单击“内容”集合,然后选择“ 字段”选项卡。 单击添加字段以添加和配置新字段,以对集合中的数据进行分类。
每个收集文档都会使数据库驱动的网站中有关单个页面的数据疼痛。 我添加了五个字段:
- slug –页面路径URL的文本字段
- title-页面标题的文本字段
- 正文 –页面内容的特殊markdown文本字段
- image –一个特殊的image字段,它允许任意数量的已上传图像(也存储在restdb.io系统中)
- 已发布 -布尔值,必须为true,页面才能公开显示。
步骤4:添加文档
可以以标准或开发人员模式(或通过API)将文档添加到集合中。 创建一些具有典型页面内容的文档:
对于主页,该段应该为空。
步骤5:创建数据库驱动的网站(可选)
restdb.io提供了一个有趣的功能,可以使用集合中的数据文档来创建和托管数据库驱动的网站 。
该站点托管在www- yourdbname .restdb.io,但您可以在页面上指向任何域 。 有关说明,请单击数据库列表中或左侧面板底部的设置 ,然后单击虚拟主机选项卡。
要创建网站,必须在开发人员模式下配置页面,该页面定义用于查看内容的模板。 模板包含一个代码段,用于设置:
- 上下文 –在集合中找到正确文档的查询,以及
- 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”选项卡中:
单击添加新以创建一个新的密钥。 我在这里创建的请求仅限于内容集合上的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来处理内容。 它将要求:
- 一个新的restdb.io API密钥(或更改现有密钥),可以对内容集合进行适当的GET,POST,PUT,PATCH和DELETE访问。
- 一种用于浏览或搜索页面的用户界面(上面的一个可能是一个很好的起点)。
- 开始新页面或获取现有内容并将其置于可编辑形式的过程。
- 使用适当的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/