英文:
How do I create multiple associated records with a single POST request?
问题
这里的资源是一种日志类型,将创建5个不同的记录,其中包括天气、位置等等...它们都将共享关联。
据我了解,按照惯例,每个资源应该创建一个帖子,但如果这些资源需要其他记录的外键,我无法弄清楚如何跟踪与该日志相关的所有记录的ID。
目前,我正在发送创建所有资源所需的所有数据的单个请求,如果其中一个请求出错,将不会创建任何记录,因为我将使用事务。这是常规做法吗?
英文:
The resource here is a Log type that will create 5 different records, one for weather, location etc... they will all share associations.
It's my understanding that convention would be to create a post for each resource but if these resources require the foreign key of other records I can't figure out how I would keep track of all the id's of the records created relating to that log.
Right now I'm sending all the data needed to create all the resources in a single request and if one errors out none would be created as I would use a transaction. Is that convention?
答案1
得分: 1
“按照惯例,每个资源都应该创建一个帖子。”
当你有一个简单的模型,其中一个对象受到一个用户操作的影响时,这个惯例非常有效。这种模型非常常见,几乎在每本关于REST的书籍或文章中都有实现。
现实情况更加复杂,你的问题就是一个很好的例子。按表格创建公共API是一种已知且不幸广泛传播的反模式:
https://martinfowler.com/bliki/AnemicDomainModel.html
一般原则是,围绕你的业务问题构建解决方案,而不是围绕技术框架或模式。
“现在我正在发送创建所有资源所需的所有数据的单个请求。”
这听起来是一个很好的解决方案。一个业务操作 -> 一个API调用 -> 一个数据库事务。这很简单明了。如果没有必要,不要让它变得更加复杂。
英文:
> convention would be to create a post for each resource
This convention works great when you have a simple model when one object is affected by one user action. That model is quite common and implemented in every REST book/article.
Reality is more complicated, and your question is a great example of that.
Implementing PUBLIC API per table is known and unfortunately widely spread antipattern:
https://martinfowler.com/bliki/AnemicDomainModel.html
Rule of thumb, build your solution around your business problem, not around a technical framework or pattern.
> Right now I'm sending all the data needed to create all the resources
> in a single request
That sounds like a great solution. One business action -> one API call -> one DB transaction. It is nice and simple. Do not make it more complicated if it is not necessary.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论