Backbone UI 和 CMS 后端:涉足 Restful CRUD

Posted

技术标签:

【中文标题】Backbone UI 和 CMS 后端:涉足 Restful CRUD【英文标题】:A Backbone UI and a CMS backend: Wading through the Restful CRUD 【发布时间】:2012-07-27 06:15:56 【问题描述】:

Backbone 教程我已阅读实现某种类型的迷你框架(即 Slim),它具有在服务器数据库 like this 上执行 CRUD 的 RESTful 架构。 Backbone 文档指出您需要一个 RESTful api,我相信这是由于 Backbone Route and Sync 功能使模型保持最新,这是我选择使用 Backbone 的一个重要方面。

例如,下面的行将虚假 url(路由)映射到“addWine”函数(在 Slim api 中):

$app->post('/wines', 'addWine');

假设 1:如果我有一个 (php) CMS 后端(而不是迷你框架),我假设我可以简单地将第二个参数 (addWine) 替换为我自己的 CMS 类方法调用和返回一个 json 对象。

假设 2 但是我不能直接从 html 中的链接调用相同的类方法而不会导致主干丢失状态,因此它能够同步模型数据(并记住浏览器历史记录)。

假设 3 在这种情况下,我将需要使用 Slim api 并通过 (Slim) RESTful CRUD 调用路由主干 URL,以便访问我的 CMS 数据库以保持主干满意。

如果这些假设是正确的,那么似乎骨干网正在拦截这些 HTTP 调用——这让我想知道整个 RESTful + 骨干网关系是如何工作的。你能解释一下吗?

如果我的假设不正确,那么我需要的帮助比我想象的要多。你能帮忙吗?

谢谢

【问题讨论】:

【参考方案1】:

我不能与您的三个假设密切相关,但至于您的最后一个问题——Backbone 不会“拦截”HTTP 调用——它会构造它们,就像任何其他 javascript 库会创建 AJAX 请求一样。

Backbone 与您的服务器端语言/框架相对无关。这是 Backbone 在任何时候调用“sync”时所期望的:

Backbone 的同步功能根据调用的方法使用不同的 HTTP 请求类型。这些不同的 HTTP 请求类型是:

发布 获取 放 删除

您的框架需要支持以上所有功能,才能支持 Backbone 的“开箱即用”功能。这意味着您必须在应用程序中指定所有上述路由才能使用 Backbone。

另一件需要注意的事情是“create”和“update”方法并没有专门在请求中携带发布数据——而是发送一个带有数据的json摘要的内容主体,并期望服务器端正确解析一个 JSON 对象并适当地处理它。

【讨论】:

对于那些在 RESTful(代表性状态转移)架构中苦苦挣扎的人,read this。 Backbone 需要一个 REST 实现才能工作。 Andy 关于 POST 和 JSON 的注释以及链接应该有助于构建需要发生的事情的图景。正如@Claudio-Hojda 所证实的那样,我的三个假设都是正确的;但是只有当您希望让其他人了解服务器的最新状态时才需要使用 websockets 和轮询服务器——这不是我的目标。【参考方案2】:

我对所有三个假设都说“是”,也同意@Andy Baird。

此外,您的项目唯一的问题是如何通知 Backbone 您已更新数据库并且您希望它在前端自行更新。我只能看到两个解决方案:

1) 使用 Javascript 的 setInterval() - 如果您不需要在数据库更新时立即更新前端,您可以每 1 分钟检查一次更改,Backbone 知道只更新已更改的内容并添加新内容但当然,如果你有 1k 活跃的人每分钟重复请求,这对服务器来说是不健康的

2) 使用SocketIO 或类似服务 - 这样您可以从服务器向 Backbone 发送对数据库的整个修改列表或简单的“请刷新,新内容等待”。检查this discussion。

【讨论】:

以上是关于Backbone UI 和 CMS 后端:涉足 Restful CRUD的主要内容,如果未能解决你的问题,请参考以下文章

Backbone模型

如何进行backbone.js UI测试

Backbone,Node和Mongo错误验证和通信

require.js+backbone 使用r.js 在本地与生产环境 一键压缩的实现方式

处理 Chrome + Backbone 中的网络错误

require.js+backbone 使用r.js 在本地与生产环境 一键压缩的实现方式