使用非标准REST API的Ember数据

Using Ember Data with non standard REST API

本文关键字:Ember 数据 API REST 非标准      更新时间:2023-09-26

我正在尝试连接Ember Data以使用现有的REST API。我遇到的问题是REST实现不符合EmberData期望的方式。我在网上搜索了一些文档,这些文档可以建议如何使事情正常工作,但由于没有编写自己的DS.Adapter实现,我不知所措。

以下是我的请求:

/api/user/12345

它提供以下响应:

{
    data: {
        ID: '12345',
        firstName: 'Fred',
        lastName: 'Flintstone',
        emailAddr: 'fred.flintstone@example.com'
    }
}

Ember期望"数据"是"用户"。遗憾的是,我无法轻松更改API。有什么建议吗?

感谢

我认为可以实现这一点的一种方法是创建自己的序列化程序并覆盖extract函数:

App.RESTSerializer = DS.RESTSerializer.extend({
  extract: function(loader, json, type, record) {
    var root = 'data';
    if (json[root]) {
      if (record) { loader.updateId(record, json[root]); }
      this.extractRecordRepresentation(loader, type, json[root]);
    }
  }
});
App.Store = DS.Store.extend({
  adapter: DS.RESTAdapter.extend({
    serializer: App.RESTSerializer.create()
  })
});

请注意,此修改假设您的请求内容将始终位于JSON的data密钥下。

还值得一提的是,原始的extract方法有两行未包含在示例中:

 this.sideload(loader, type, json, root);
 this.extractMeta(loader, type, json);

这会使您失去side loading功能和metadata提取。我希望失去这个功能并不是你的用例的一个展示停止

希望能有所帮助。