Как обрабатывать удаление отношений в JSON: API?

В настоящее время мы разрабатываем одностраничное приложение с использованием Ember и CakePHP. Мы используем JSON: API формат для передачи данных.

Однако при создании отношения клиент передает идентификатор. При удалении отношения Ember передает идентификатор как null,

Но на стороне сервера null не захватывается, поэтому мы используем дополнительный параметр запроса, чтобы указать, что он должен быть удален.

Как мы можем достичь этого (захватить null значение), используя CakePHP, все еще придерживаясь спецификации JSON: API?

В качестве альтернативы, есть ли другой способ удалить связь с помощью спецификации JSON: API или с помощью Ember?

4

Решение

Я почти уверен, что это лучше всего решить на стороне PHP, поэтому я уверен, что кто-то еще лучше подойдет для ответа на этот вопрос. Я могу ответить со стороны Ember.

Первое, что я хотел бы сказать, это то, что @handlebars прав в своем комментарии: главное, чтобы вы не нужно использовать ember-данные для каждого запроса если ты не хочешь

Под этим мы подразумеваем, что у вас, вероятно, уже есть ситуация, когда вы получаете набор моделей с помощью ember-data такими методами:

this.get('store').findRecord('post', 1);

и вы, вероятно, уже настроили несколько отношений. Если вы хотите удалить отношение, и ваш бэкэнд API не в состоянии следовать JSON: спецификация API тогда вы можете просто создать конкретную конечную точку, которая выполняет эту работу.

Затем выполнить DELETE запрос к конкретной конечной точке, то вы можете использовать следующий код:

import Controller from '@ember/controller';
import { inject as service } from '@ember/service';

export default Controller.extend({
ajax: service(),
actions: {
deleteRelationship(id) {
this.get('ajax').request(`/posts/${id}/author`, {
method: 'DELETE',
});
}
}
});

Этот код использует уголек-Аякс совершить прямой звонок в сеть.

НОТА: Вы должны быть очень осторожны с этим подходом. Это будет означать, что ваш бэкэнд не синхронизируется с данными ember, и вам придется перезагрузить пост-модель во внешнем интерфейсе сразу после выполнения удаления:

store.findRecord('post', 1, { reload: true });

Из-за некоторого странного поведения синхронизации я настоятельно рекомендую чтобы вы обновили свой бэкэнд, чтобы иметь возможность следовать спецификации JSON: API и принимать пустые значения для удаления отношений.

Также, если вы хотите, чтобы мы обсуждали ответ на этот вопрос на видео, вы можете посмотреть его здесь https://youtu.be/WKfq3dS73xg и здесь https://youtu.be/ExUtgatzZeI?t=25m54s

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]