Свойства Dasherize для JSONAPI

У меня есть эта модель в моем бэкэнде drf:

class Product:

    price_range = ...

Я использую EmberData с сериализатором JSONApi. Я только что узнал, что JSON API требует разбитых свойств. Так что мне нужно сказать 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 соответствующие настройки описаны здесь.

Где это задокументировано для JSONApi, EmberData а также Ember? Я хотел бы убедиться, что я действительно понял это, и что это также относится к отношениям. Связанный drf Конфигурация настройки будет:

JSON_API_FORMAT_RELATION_KEYS = 'dasherize'

1 ответ

Решение

В блоге для Ember-Data 1.13 В выпуске Ember data команда пишет:

JSONSerializer и RESTSerializer были реорганизованы и оптимизированы для возврата полезных нагрузок JSON API.

Это означает, что для продвижения вперед Ember Data ожидаются разбитые имена в соответствии с JSON API. См. Рекомендации JSON API для тире между словами имен членов:

Имена членов ДОЛЖНЫ содержать только символы "az" (от U+0061 до U+007A), "0-9" (от U+0030 до U+0039) и дефис минус (U+002D HYPHEN-MINUS, "-") как разделитель между несколькими словами.

И посмотрите на пример JSON на домашней странице JSON API:

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

Что касается моделей, самая последняя документация для 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, это всего лишь рекомендация. Посмотрите это обсуждение на GitHub относительно соглашения о наименовании для JSON API.

Другие вопросы по тегам