Json 创建Ember数据适配器以从Flickr API中提取

Json 创建Ember数据适配器以从Flickr API中提取,json,rest,ember.js,model,adapter,Json,Rest,Ember.js,Model,Adapter,我正在开发一个需要使用FlickrAPI获取照片信息的Ember应用程序。我想了解一些关于如何编写适配器以将此信息拉入我的Ember应用程序的建议。我对Flickr API的调用返回以下格式的JSON: { "photos": { "page": 1, "pages": 2, "perpage": 100, "total": "123", "photo": [ { "id": "1234567890",

我正在开发一个需要使用FlickrAPI获取照片信息的Ember应用程序。我想了解一些关于如何编写适配器以将此信息拉入我的Ember应用程序的建议。我对Flickr API的调用返回以下格式的JSON:

{
"photos": {
    "page": 1,
    "pages": 2,
    "perpage": 100,
    "total": "123",
    "photo": [
        {
            "id": "1234567890",
            "owner": "1234567@123",
            "secret": "1234567890",
            "server": "1111",
            "farm": 1,
            "title": "Some Title",
            "ispublic": 1,
            "isfriend": 0,
            "isfamily": 0
        },...
        ]
    },
 "stat": "ok"
}

基于此响应的格式,我确定我不能使用JSONAPIAdapter,必须使用RESTAdapter。我唯一感兴趣的是照片阵列。响应的这一部分似乎也经过了适当的格式化,以适合Ember数据模型,因为它为主键提供了一个id。我花了很长一段时间浏览,以找到这个问题的解决方案,但对于这些适配器和序列化程序是如何工作的,我仍然非常困惑。我需要采取哪些步骤来定制适配器,以便将这些数据正确地拉入照片模型?提前感谢您。

这是一本关于这个主题的好书:,作者是David Tang,还有一篇优秀的博客文章:来自Ember Igniter

https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key={api key}&tags=flower&per_page=3&format=json

将提出:

{
  photos: {
    page: 1,
    pages: 71281,
    perpage: 3,
    total: "213841",
    photo: [
      {
        id: "35314184896",
        owner: "33472394@N00",
        secret: "e02e15d7c3",
        server: "4198",
        farm: 5,
        title: "Bird's-foot Trefoil",
        ispublic: 1,
        isfriend: 0,
        isfamily: 0
      },
    ]
  },
  stat: "ok"
}
因此,您需要为“photo”创建一个模型+一个适配器来获取数据,然后在序列化程序中使用
normalizeResponse()
或一些方法组合将余烬数据重新格式化,以将其放入数组中。照片的URL在哪里

请查看David的这篇文章:

这是一个粗糙的问题。我只是想做个小游戏,但是没有适配器。祝你好运

已解决:

使用normalizeResponse()将数据序列化为照片模型。照片模型镜像了上面发布的示例JSON中的照片字段

import DS from 'ember-data';

    // app/serializers/photo.js
    export default DS.RESTSerializer.extend({
      normalizeResponse(store, primaryModelClass, payload, id, requestType) {
        payload = {
          photo: payload.photos.photo
        };

        return this._super(store, primaryModelClass, payload, id, requestType);
      }
    });
我的适配器定义如下:

import DS from 'ember-data';

// app/adapters/photo.js
export default DS.RESTAdapter.extend({
  host: 'https://api.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=<YOUR_KEY_HERE>&user_id=<YOUR_USER_ID_HERE>&format=json&nojsoncallback=?',
  namespace: 'api'
});
从“余烬数据”导入DS;
//app/adapters/photo.js
导出默认DS.RESTAdapter.extend({
主持人:'https://api.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=&user_id=&format=json&nojsoncallback=?',
名称空间:“api”
});

感谢您分享以上丰富的资源。

对于这样一个开放式问题,这里可能不是最好的地方-您需要的是一个指南。您是否已彻底阅读了文档的这一部分?你可能还想看看这篇文章。如果你只想和专家聊天,灰烬松弛频道是个不错的地方。谢谢你的帮助!我将研究这些链接。图像的URL不会直接出现在JSON响应中,但是,因为图像URL的格式保持一致,所以我应该能够使用手柄和图像ID相当容易地生成它们。