仅对一个或多个服务使用RESTful CRUD
如果我有一个简单的数据结构,只需要一个服务(formular)来处理其他表(formgroups、fields)中的相关数据仅对一个或多个服务使用RESTful CRUD,rest,feathersjs,feathers-sequelize,Rest,Feathersjs,Feathers Sequelize,如果我有一个简单的数据结构,只需要一个服务(formular)来处理其他表(formgroups、fields)中的相关数据 如何区分是更新操作还是在结构中插入新数据的创建操作?(通过id之类的东西,它是否为空?) 使用一个或多个服务 数据结构: { "id": 7 "name": "Formular name", "formgroups": [ { &
{
"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的记录
在一个服务中这样做会损害单一责任原则。因为我的公式化服务中有来自formgroup和field的逻辑
此外,我不确定挂钩前后是否还会继续使用羽毛。他们可能绕过了
如果使用多个服务(/formular、/formgroup、/field),则执行相同的id检查,但客户端应用程序使用PUT/PATCH或POST向每个服务分派
补丁/公式/7
补丁/表单组/28
补丁/字段/108
POST/formgroup(使用公式id 7插入,并为下一个字段插入获取公式组id 29)
邮政/字段(插入带有表单组id 29的“街道”)
POST/字段(插入表单组id为29的“Zip”)
但这看起来不对。提出了这么多要求。也许对每个新创建的formular/formgroup/field立即这样做是一种解决方案,而不是一次保存整个数据结构
第三种方式可能是拥有所有服务,但永远不要公开所有服务。将hole数据结构发送到/formular服务,其中该服务在内部调用其他服务/formgroup和/field以进行CRUD操作。
但我不知道这是否仍然适用于hooks部分和feathers sequelize功能
实体关系模型:
{
"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"}
]
}
]
}
我的测试项目的Sourceode可以在这里找到:
有关应用程序的其他信息:
我的申请分为两部分
PUT /formular
是一种非常合理的方式,可以向服务器建议它使其/formular
的副本看起来像客户端的副本
然后,服务器负责(a)确定如何更改其资源副本以响应请求,以及(b)确定如何进行这些更改
因此,如果/formular是从多个表中的多行构建的资源,那么服务器需要自己确定需要哪些数据库语句来适当地更新这些表
这种复杂性被故意隐藏在REST facade后面——就客户机而言,您只是将资源的新表示形式写入某个文件中
就单一责任原则而言,请求处理者有一个责任——处理请求。您可能希望通过让请求处理程序将部分或全部工作委托给更简单的事情来实现这一点
(例如,解析HTTP请求、生成HTTP响应等)我不知道挂钩或羽毛续集,因此我无法猜测它们可能会有什么帮助(或者它们可能会有什么阻碍)。谢谢。你的回答很有助于澄清问题。我脑子里有太多不同的东西,比如SOA、ORM、REST,通过相互映射将它们混合在一起,最终让我非常困惑,看不见了。多亏了你,现在一切都好了。