Как обрабатывать удаление отношений в JSON: API? - PullRequest
0 голосов
/ 04 мая 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 04 июня 2018

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

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

Что мы подразумеваем под этим, так это то, что у вас, вероятно, уже есть ситуация, когда вы получаете набор моделей с помощью 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-ajax для прямого вызова в сеть.

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

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

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

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

...