JSON API响应和ember模型名称

csw*_*ght 6 ember.js ember-data json-api

关于JSON API响应键"类型"与Ember模型名称匹配的快速问题.

如果我有一个模型,说"models/photo.js",我有一个像"/ photos"的路线,我的JSON API响应看起来像这样

{
  data: [{
    id: "298486374",
    type: "photos",
    attributes: {
      name: "photo_name_1.png",
      description: "A photo!"
    }
  },{
    id: "298434523",
    type: "photos",
    attributes: {
      name: "photo_name_2.png",
      description: "Another photo!"
    }
  }]
}
Run Code Online (Sandbox Code Playgroud)

我假设我的模型名称应该是单数但是会弹出这个错误

Assertion Failed: You tried to push data with a type 'photos' but no model could be found with that name
Run Code Online (Sandbox Code Playgroud)

当然,这是因为我的模型被命名为"照片"

现在,在JSON API规范中,有一条注释"此规范与变形规则无关,因此type的值可以是复数或单数.但是,在整个实现中应始终使用相同的值."

所以,

tl; dr服务器的"Ember方式"是否具有模型名称和JSON API响应键"类型"都是单数的?或者只要匹配就没关系?

art*_*ych 7

JSON API序列化程序需要多种类型.指南中的有效载荷示例.

由于modelNameFromPayloadKey函数单一化键,它适用于奇异类型:

// as is
modelNameFromPayloadKey: function(key) {
  return singularize(normalizeModelName(key));
}
Run Code Online (Sandbox Code Playgroud)

但是payloadKeyFromModelName如果在后端使用单数类型,则逆操作会使模型名称复数并且应该更改:

// as is
payloadKeyFromModelName: function(modelName) {
  return pluralize(modelName);
}
Run Code Online (Sandbox Code Playgroud)

内部Ember Data JSON API格式与JSONAPISerializer使用的格式略有不同很重要.Store.push期望奇异类型,JSON API序列化器期望复数.

讨论:

"... ED在内部使用camelCased属性和单数类型,无论你使用什么适配器/串行器.

当您使用JSON API适配器/序列化器时,我们希望用户能够使用jsonapi.org上提供的示例并使其正常工作.大多数用户从不关心内部格式,因为序列化程序处理它们的工作.

这些在指南中有记录,http://guides.emberjs.com/v2.0.0/models/pushing-records-into-the-store/ ..."