Dasherize JSONAPI的属性

时间:2015-12-31 11:49:28

标签: ember.js ember-data django-rest-framework json-api

我的drf后端有这个模型:

class Product:

    price_range = ...

我正在使用EmberData和JSONApi序列化程序。我刚刚发现JSON API需要dasherized属性。所以我需要告诉drf:

JSON_API_FORMAT_KEYS = 'dasherize'

该属性在JSON中序列化为:

price-range

然后,EmberData跳舞,我得到Ember模型属性:

import DS from 'ember-data';

export default DS.Model.extend({
    ...
    priceRange: DS.attr('number'),
    ...
});

(旧的RESTSerializer期待priceRange中的JSON,如果我没记错的话)

所以,我们来自price_range - > price-range - > priceRange(如果你问我,那真是太疯狂了)。我通过反复试验找到了这一切。对于drf,相应的设置记录为here

JSONApiEmberDataEmber记录了哪些内容?我想确保我真的理解这一点,这也是关系的情况。相关的drf配置设置为:

JSON_API_FORMAT_RELATION_KEYS = 'dasherize'

1 个答案:

答案 0 :(得分:5)

blog post for the Ember-Data 1.13 release中,Ember数据小组写道:

  

JSONSerializer和RESTSerializer已经过重构和简化   返回JSON API有效负载。

这意味着向前推进Ember Data需要符合JSON API的符号化名称。见the JSON API recommendation for dashes in between words of member names

  

会员名称应该只包含字符“a-z”(U + 0061到   U + 007A),“0-9”(U + 0030至U + 0039),连字符减(U + 002D)   HYPHEN-MINUS,“ - ”)作为多个单词之间的分隔符。

在JSON API主页上查看一些示例JSON:

-"attributes": {
    "first-name": "Dan",
    "last-name": "Gebhardt",
    "twitter": "dgeb"
},

就模型而言,the most recent documentation for Ember 2.2.0表示:

  

在Ember Data中,惯例是在模型上使用属性名称

使用mutli-world属性名称给出的示例模型符合预期:

export default DS.Model.extend({
  firstName: DS.attr('string'),
  lastName:  DS.attr('string'),

  isPersonOfTheYear: DS.attr('boolean')
});

虽然推荐的命名约定确实存在流失,但我预计此时大多数这些更改都在我们身后。核心团队已经注意到了。我相信可以围绕JSON API进行标准化,以便可以构建可互操作和可重复使用的工具,但不幸的是,这一变化伴随着这些变化。

总结:在您的模型中使用JSON中的虚线名称和驼峰名称。

编辑: 似乎虽然Ember Data团队采用了JSON API关于JSON有效负载中属性名称的建议,但它只是一个推荐。有关JSON API,请参阅GitHub regarding the dasherized naming convention上的讨论。