Если у меня есть простая структура данных, для которой потребуется только одна служба (formular) для обработки связанных данных в других таблицах (formgroups, fields) .
- Как отличить, это операция обновления или операция создания с новыми вставленными в структуру данными? (что-то вроде идентификатора, который равен нулю или нет?)
- Используете один или несколько сервисов?
Структура данных:
{
"id": 7
"name": "Formular name",
"formgroups": [
{
"id": 28,
"formularId": 7
"name": "General",
"fields": [
{ "name": "Firstname", "id":107, "formgroupId":28 },
{ "name": "Lastname", "id":108, "formgroupId":28 },
{ "name": "Birthdate", "id":111, "formgroupId":28 }
]
},
{
"name": "Address; new group with new fields",
"fields": [
{ "name": "Street"},
{ "name": "Zip"},
{ "name": "Country"}
]
},
{
"name": "Additions",
"fields": [
{ "name": "First Line"},
{ "name": "Second Line"}
]
}
]
}
Если бы с одной службой (/ formular), я бы отправил ей всю структуру данных, и мне нужно было бы различать элемент с id, чтобы он сделал запрос на обновление, или если у него нет его , создайте запись с соответствующим родительским идентификатором.
Выполнение этого в одном сервисе нарушит принцип единственной ответственности. Потому что у меня есть логика из группы форм и поля в моем сервисе формул.
Также я не уверен, работают ли крючки «до» и «после» с ассоциациями продолжения перьев. Возможно, их обошли стороной.
При работе с несколькими службами (/ formular, / formgroup, / field) выполняется та же проверка для id, но клиентское приложение отправляет каждую службу с помощью PUT / PATCH или POST.
PATCH / formular / 7
ПАТЧ / formgroup / 28
ПАТЧ / поле / 108
POST / formgroup (вставьте с формульным идентификатором 7 и получите обратно идентификатор formgroup 29 для следующей вставки поля)
POST / поле (вставьте "Street" с идентификатором группы форм 29)
POST / поле (вставьте 'Zip' с идентификатором группы форм 29)
...
Но это выглядит неправильно. Сделано так много просьб. Возможно, решение сделать это немедленно для каждого вновь созданного формуляра / группы форм / поля, а не думать о сохранении всей структуры данных сразу.
Третий способ может заключаться в использовании всех служб, но никогда не раскрывать их все. Отправка структуры данных дыры в / formular service, где она вызывает внутри другие службы / formgroup и / field для операций CRUD. Но я не знаю, работает ли это по-прежнему с функцией крючков и функцией продолжения перьев.
Модель взаимоотношений между сущностями.
Исходный код моего тестового проекта можно найти здесь: https://github.com/Orbitkorbi/feathers-sequelize-test
Дополнительная информация о приложении: мое приложение разделено на две части.
- Серверное приложение, на котором запущены перышки и предоставляют REST API со своими службами.
- Клиентский SPA, работающий в браузере, совершающий вызовы API.
Вопрос: Как это сделать в отношении сервисов, хуков, отношений сиквелизации и RESTful API?