【发布时间】:2012-07-23 22:13:00
【问题描述】:
在构建与 RESTful(希望如此)API 对话的 Backbone.js SPA 的过程中。我尝试围绕资源设计 API,使用超媒体将资源链接在一起。当我开始在 Backbone 中实现一些东西时,我开始意识到使用 Backbone 实现真正的超媒体可能并不合适。
主要问题是骨干路由器希望预先声明其路径。使用良好的超媒体 API,资源 URI 不应在客户端中硬编码,以便灵活地添加新功能和 (gasp) 更改资源位置。
我正在尝试将客户端级页面资源与 API 级对象资源分离。如果这很疯狂,有人会尖叫。基本上,这意味着在我的主干应用程序中定义到资源的路由(想象一个离散页面),然后检索一个或多个 API 级别的资源。
这引出了一些有趣的问题:
-
这是个好主意吗?我是否应该尽我所能在我的应用程序中重复使用 API 级别的资源 URI,以便路由是一对一的。
- 我意识到 page 和 api 对象 只是同一资源的不同表示,但在大多数情况下,一个页面是多个资源的组合。或者我只是疯了:)
在一系列导航过程中页面刷新会发生什么。如果 API 级资源不同,我如何知道它们的位置?
在我看来,RESTful 设计强调发现,而不是预先了解事物。我这样假设是对的吗?这就是代码下载的全部内容吗?如果我的方向正确,有人可以指出我进一步阅读。
大部分资源都是只读的,所以只使用 GET 动词,但我确实有一些使用 POST/PUT 的场景(DELETE 真的不在这个领域特定客户,除非可能在订单完全下达之前中止订单)。
*我只想说我绝不是 REST 大师。我仍在学习过程中,所以请随时告诉我我完全脱离了基地。没有感情会受到伤害。
编辑:
我一直在考虑更多与 SPA 相关的代码下载。更多选择:
-
在动态加载(代码下载)的“API”资源或类似资源中定义您的资源 URI。这是一个例子:
// this object downloaded along with the application code, on a refresh Framework.API.Resources = { Tasks: { uri: '/tasks', rel: 'self' }, Users: { uri: '/users', rel: 'self' }, // ... etc } // then in a collection var TaskCollection = Backbone.Collection.extend( uri: Framework.API.Resources.Tasks.uri // implementation details ); 在您浏览资源时动态定义您的路线,使用“根”资源 uri 作为您的路线。我相信 Backbone.Router.route 可以做到这一点,但我不确定是否可以即时执行。有人试过吗?
【问题讨论】:
标签: rest backbone.js hypermedia