如果我有一个简单的数据结构,只需要一个服务(公式)来处理其他表(表单组、字段)中的相关数据。
- 如何区分是更新操作还是在结构中插入了新数据的创建操作?(通过类似 id 是否为空?)
- 使用一项或多项服务?
数据结构:
{
"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的元素,因此它将进行更新查询,或者如果没有,则创建与其相关的记录“父母”-id。
在一项服务中这样做会损害单一责任原则。因为我的公式服务中有来自表单组和字段的逻辑。
此外,我不确定之前和之后的钩子是否可以再与羽毛续集关联一起使用。他们可能绕过了。
如果使用多个服务(/formular、/formgroup、/field),请对id进行相同的检查,但客户端应用程序使用 PUT/PATCH 或 POST 分派到每个服务。
补丁/公式/7
补丁/formgroup/28
补丁/字段/108
POST /formgroup (插入公式 id 7 并取回 formgroup id 29 用于下一个字段插入)
POST /field(插入“Street”,表单组 id 为 29)
POST /field(插入 'Zip' 表单组 id 为 29)
...
但这看起来不对。提出了这么多要求。也许对每个新创建的公式/表单组/字段立即这样做是一种解决方案,而不是考虑立即保存整个数据结构。
第三种方法可能是拥有所有服务,但永远不要公开所有服务。将洞数据结构发送到 /formular 服务,该服务在内部调用其他服务 /formgroup 和 /field 以进行 CRUD 操作。但我不知道这是否仍然适用于钩子部分和羽毛续集功能。
实体关系模型:
我的测试项目的源代码可以在这里找到:https ://github.com/Orbitkorbi/feathers-sequelize-test
关于应用程序的附加信息: 我的应用程序分为两部分。
- 运行 feathersjs 并为 REST API 提供其服务的服务器应用程序。
- 在浏览器中运行的客户端 SPA 调用 API
问题: 在feathersJS 服务、钩子、sequelize 关系和 RESTful API 方面如何做到这一点?