首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >RestAdaptor和API结构

RestAdaptor和API结构
EN

Stack Overflow用户
提问于 2013-08-09 14:09:15
回答 1查看 338关注 0票数 0

我是Ember数据的新手,到目前为止我所做的都是固定数据,但今天我试图从真正的交易中毕业,并意识到我对如何连接模型和API的调用签名还不太了解。

具体来说,我希望能够调用端点GET /activities/[:user_id]/[date]。这将加载一个“活动”对象数组,但只加载给定日期的对象。我知道我可以用以下方法来抵消API的目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 DS.RESTAdapter.reopen({
   namespace: 'api'
 });

在我的例子中,api前缀是合适的。我想我也应该能够通过设置这样一条路线来解决日期组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.resource('activities', { path: '/activities' }, function() {
    this.route('by_date', {path: '/:target_date'});
});

以上只是一个合理的猜测,因为我完全不知道如何将user_id组件输入到URL签名中。有人能帮忙吗?是否有任何好的教程或基本的Ember数据用例的例子?

还有,因为我知道我会遇到下一个.如何将参数添加到url字符串(也就是获取/foobar?something=value),而将参数添加到URL本身(如上面所示)?

-=-=-=

我已经执行了@intuitivepixel的建议,但仍然有一些问题.

首先,我试图对userIddateBy的值进行硬编码

路由器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.resource('activities', { path: '/activities' }, function() {
    this.route('by_date', {path: '/:user_id/:by_date'});
});

路由:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
App.ActivitiesByDateRoute = Ember.Route.extend({  
    serialize: function(activity) {
      return {
        userId: 1,
        dateBy: "2013-07-01"
      };
    }     
});

遗憾的是,这是行不通的。我想我理解为什么--尽管我没有一个快速的方法来解决这个问题--但更让我困扰的是,当我手动将参数放入URL:http://restful.service.com/api/activities/1/2013-07-01中时。这些结果让我感到非常惊讶:

  • 最初,调试消息意味着成功:

  • 但是,这是不正确的,因为实际上没有发出任何网络请求。
  • 如果您重新加载浏览器,它现在将退出并获取活动,但令我惊讶的是,它也会找到指定的用户。嗯。没关系,成功地将用户1拉回。

  • 但是,该活动只是一个GET /activities调用,它失败了,因为这个端点需要用户和日期限定符才能工作。为什么这些不包括在请求中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-09 15:04:39

我知道我可以用以下方法来抵消API的目录:

如果是这样的话,还可以设置API的不同URL:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DS.RESTAdapter.reopen({
  url: 'http://myapihost.com',
  namespace: 'api'
});

这将产生一个类似于http://myapihost.com/api/的URL

以上只是一个合理的猜测,因为我完全不知道如何将user_id组件输入到URL签名中。

按照您的示例并添加user_id动态段,假设您具有以下路由器映射定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.resource('activities', { path: '/activities' }, function() {
  this.route('byDate', {path: '/:user_id/:target_date'});
});

这是您的{{linkTo}}助手:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{#each activity in model}}
  {{#linkTo 'activities.byDate' activity}}
{{/each}}

然后,要从多个动态段构建url,可以连接到路由的serialize函数,并返回一个由您的URL需要的动态段组成的散列:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
App.ActivitiesByDateRoute = Ember.Route.extend({
  serialize: function(activity) {
    return {
      user_id: activity.get('userId'),
      target_date: activity.get('targetDate')
    }
  }
});

当单击/activities/[userId]/[targetDate]链接时,上面的代码将生成类似于{{linkTo}}的URL。该示例假设您构建URL所需的属性在您的Activity模型中可用。

还有,因为我知道我会遇到下一个.如何将参数添加到url字符串(也就是获取/foobar?something=value),而将参数添加到URL本身(如上面所示)?

这种URL查询还不受ember框架的支持,但是这些都是很好的解决方法/项目,它们试图处理缺少的特性,比如:https://github.com/alexspeller/ember-query,如果有一天这个按下合并了,那么您也可以在ember中使用它们,但是在将来的时间里,您可以使用上面提到的库来支持自定义查询。对于当前状态,无论库合并与否,请在这里查看:http://discuss.emberjs.com/t/query-string-support-in-ember-router,正在进行讨论。

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18156404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文