Я на полпути к реализации структуры JSON API (с атрибутами подчеркивания).
Фактическое состояние среды разработки: :
Я использую Active Model Adapter структуру для запроса к бэкенду ресурсов и ответа бэкэнда мне со структурой JSON API .
В Application Serializer я использую JSONAPISerializer
.Я переопределяю методы:
serializeBelongsTo
keyForRelationship
keyForAttribute
serialize
serializeAttribute
serializeHasMany
и для разработки у меня все работает (бэкэнд в Rails очень хорошо общается с Ember).
Проблема связана с Ember CLI Mirage и соглашениями (не уверен, если есть простые решения или мне нужно снова переопределить методы в этом дополнении).
Фактическое состояние с Ember Cli Mirage и тестовой средой:
Я использую import { JSONAPISerializer } from 'ember-cli-mirage';
, затем пытаюсь манипулировать правильным запросом и затем преобразовать его для формата JSON API.
Он может работать следующим образом:
Ember Adapter (формат адаптера активной модели - с атрибутами подчеркивания) ---> Mirage Serializer должен получить запрос (найти ресурсы, созданные ранее в тестах с ассоциациями), а затем ответить на него с помощью JSON APIformat ---> JSON API Serializer может перехватить его и заполнить Ember DS.
На данный момент у меня отсутствует часть, чтобы сериализовать его для всех случаев в стандарт JSON API (с подчеркнутыми атрибутами)
Где я должен выполнить это преобразование, чтобы минимизировать переопределение JSONAPISerializer Mirage Serializer.
Я заметил, что есть некоторые помощники, но у меня есть пр.задача обернуть эти знания вместе (http://www.ember -cli-mirage.com / docs / advanced / route-handlers # helpers )
ОБНОВЛЕНИЕ:
Пример структуры из Backend:
{
"data": {
"id": "6",
"type": "first_resource",
"attributes": {
"id": 6,
"my_attribute": "my_attribute"
},
"relationships": {
"second_resources": {
"data": [
{
"id": "16",
"type": "second_resource"
}
]
},
"third_resource_other_type": {
"data": {
"id": "1",
"type": "third_resource"
}
},
"fourth_resource": {
"data": {
"id": "1",
"type": "fourth_resource"
}
}
},
"links": {
"fifth_resources": "/api/v1/first_resources/6/fifth_resources"
}
},
"included": [
{
"id": "1",
"type": "fourth_resource",
"attributes": {
"id": 1,
"my_attribute": "my_attribute"
},
"links": {
"sixth_resource": "/api/v1/fourth_resources/1/sixth_resource"
}
},
{
"id": "16",
"type": "second_resource",
"attributes": {
"id": 16,
"my_attribute": "my_attribute"
},
"relationships": {
"eighth_resources": {
"data": []
}
},
"links": {
"seventh_resources": "/api/v1/second_resources/16/seventh_resources"
}
},
{
"id": "17",
"type": "second_resource",
"attributes": {
"id": 17,
"my_attribute": "my_attribute"
},
"relationships": {
"eighth_resources": {
"data": []
}
},
"links": {
"seventh_resources": "/api/v1/second_resources/17/seventh_resources"
}
},
{
"id": "15",
"type": "second_resource",
"attributes": {
"id": 15,
"my_attribute": "my_attribute"
},
"relationships": {
"eighth_resources": {
"data": [
{
"id": "26",
"type": "eighth_resource"
},
{
"id": "24",
"type": "eighth_resource"
}
]
}
},
"links": {
"seventh_resources": "/api/v1/second_resources/15/seventh_resources"
}
},
{
"id": "26",
"type": "eighth_resource",
"attributes": {
"id": 26,
"my_attribute": "my_attribute"
}
}
]
}
UPDATE2
структура из отклика миража:
data: {
attributes: {
my_attribute: 'my_attribute',
second_resource_ids: [36, 37],
fifth_resource_ids: []
},
id: 11,
relationships: {
third_resource_other_type: {data: null}
fourth_resource: {data: null}
second_resources: {data: []}
},
type: "first_resources"
}
ресурсы в тестах:
server.create('second-resource', {
id: 36,
first_resource_id: '11',
my_attribute: "my_attribute"
});
server.create('eighth-resource', {
id: 140,
second_resource_id: 37
});
server.create('eighth-resource', {
id: 141,
second_resource_id: 37
});
server.create('second-resource', {
id: 37,
first_resource_id: '11',
eighth_resource_ids: [140, 141]
});
server.create('first-resource', {
id: 11,
second_resource_ids: [36, 37]
});
модель first_resource в миражах:
export default Model.extend({
third_resource_other_type: belongsTo(),
fourth_resource: belongsTo(),
fifth_resources: hasMany(),
second_resources: hasMany()
});