Я использую JSON API spec API v1.1. Я делаю это своим внешним интерфейсом, однако натолкнулся на небольшую проблему, когда пытался вернуть отношения обратно.
По сути, я отправляю тот же объект обратно и изменяю то, что мне нужно.
Это пример того, как я это делаю:
{
...originalUser,
attributes: {
...originalUser,
lastName: 'Doe'
}
}
Это все работает нормально, если originalUser
не имеет отношения, который является полностью пустым. Я знаю, что могу сделать delete originalUser.relationships.relationship
, который удалит свойство из объекта, но это могут быть любые отношения, а также отношения могут иметь такие запутанные отношения, как это звучит.
Из-за этого я знаю, что мне нужно рекурсивно пройти через объект и удалить любой пустой объект, который я боюсь сказать, что понятия не имею, как это сделать, так как мне нужно будет вызвать метод, у меня есть грубая идея, и это было бы что-то вроде ...
protected removeEmptyRelationships(obj) {
return Object.keys(obj).filter((el) => {
return el.hasOwnProperty('data');
});
}
Пример запроса, который я могу отправить
{
id: '1',
type: 'users',
attributes: {
firstName: 'John',
lastName: 'Doe'
},
relationships: {
role: {
data: {
type: 'roles',
id: '1'
}
},
group: {
data: {
type: 'groups',
id: '1',
relationships: {
policy: {}
}
}
},
type: {}
}
}
Так, в приведенном выше примере я хотел бы удалить relationships.type
, а также relationships.group.relationships.policy
. Очевидно, как было сказано ранее, это нужно будет удалить программно, так как я не знаю, что это за объект, который мне нужно удалить.
Еще одна вещь, на которую я хотел бы обратить внимание: если внутри отношений нет ключей после удаления пустых, просто удалите весь объект relationships
.