如何使用 Flask-rest-jsonapi / JSON API 在同一个 POST 方法中创建对象和相关对象?
Posted
技术标签:
【中文标题】如何使用 Flask-rest-jsonapi / JSON API 在同一个 POST 方法中创建对象和相关对象?【英文标题】:How to create object together with related object in same POST method using Flask-rest-jsonapi / JSON API? 【发布时间】:2020-02-06 06:56:53 【问题描述】:我有一个场景,我想使用 FLASK-REST-JSON API 包创建一个带有新子对象的新父对象。例如
场景喜欢用一个 POST 方法本身用新计算机创建一个新人。
根据官方文档,我们可以使用单独的 POST 创建新人和新计算机,然后使用关系将它们链接在一起。但是我想用相同的 POST 方法一起创建两个对象。
请告诉我这可能吗?如果是的话,任何例子都会很棒。
谢谢!
【问题讨论】:
【参考方案1】:JSON:API spec v1 不支持一次请求创建多个资源。有一些讨论可以增加对即将推出的 v1.1 中的扩展等的支持:Introduce Atomic Operations extensions。前段时间有一个名为 Bulk extension 的旧扩展,但那是实验性的,那时扩展的设计已经发生了很大变化。
我认为这些提议/实验中的任何一个都没有在Flask-REST-JSONAPI 中实施。
【讨论】:
感谢您的回复。因此,不支持创建同一资源的多个对象或创建不同资源类型的多个单个对象。它是否正确 ?我觉得这对于实时场景中的任何非平凡用例来说都是非常基本的,其中大多数模型不代表资源并且资源只能为多个模型(数据库表)定义。我在这里错过了什么吗?有没有我可以参考的例子知道如何处理这种情况? JSON:API 中没有类似模型的东西。资源由资源对象定义。它由它的类型和唯一 ID 定义。它可能具有属性和关系。您不能使用一个请求创建多个资源,该请求既不是相同类型也不是不同类型。对于实时场景,这应该不是问题。发送多个请求不应该对几乎所有用例造成性能问题。但是如果您需要原子事务,这是一个很大的限制。在这种情况下,您可以实施建议的扩展之一。但请注意,它们还不是规范的一部分。 也许我在这里遗漏了一些东西。假设我们有不同的表 UserPost 和表 Tags 及其相关的模式 UserPost 和 Tags。典型的场景是创建带有标签的 UserPost 以及单个 REST 发布或放置 API,而不是在单独的发布或放置对 UserPost 和标签的请求中 @nja 您的场景听起来更像是创建一个与标签相关的 UserPost。这是可能的。只需为关系对象提供创建请求。但是您不能同时创建一个新标签和一个新 UserPost。或者反过来说:标签必须存在才能在创建 UserPost 时引用它。 正如你所提到的,我的场景与一起创建带有新标签的新帖子有关,正如你所澄清的那样,我们不能这样做。我们也可以先创建帖子,然后使用两个不同的 URL 创建标签和链接以发布帖子。但是从前端需要发送两个请求,前端开发人员可能不喜欢。是否有推荐的方法或示例来处理这种情况以上是关于如何使用 Flask-rest-jsonapi / JSON API 在同一个 POST 方法中创建对象和相关对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]