【问题标题】:Which way should I create a list of objects when sending POST request发送 POST 请求时应该以哪种方式创建对象列表
【发布时间】:2014-03-11 21:04:15
【问题描述】:

当我创建相同类型的对象并将它们保存到数据库中时,我应该在一个请求中发送这些对象的列表还是应该为每个对象单独发送?

比如我想创建一个待办事项列表,我可以创建多个待办事项,然后点击保存发送一个待办事项列表,或者当我编辑完一个待办事项后,我直接保存。

第一种方式可以保存请求数,创建多个对象只需要一个请求。但是第一种方式是 RESTful 吗?所有关于在 REST 中创建的信息都是创建一个对象,但是如果增加请求数量会不会有问题?

----编辑

谢谢大家回答我。

对于更具体的用例,我使用的是 Django Rest Framework。我创建了一个 Todo 模型和一个相应的序列化程序。我想知道,我怎样才能创建一个待办事项列表?我尝试将待办事项列表发送到序列化程序,并且期望序列化程序可以像获取实例列表一样自动循环遍历它。但这不起作用。我知道我可以创建一个循环来每次调用 create 方法。但是有没有更好的方法呢?

【问题讨论】:

  • 这可能取决于您的网络界面。您对 http 请求的大小有限制(大约 4kO)。在服务器大小上增加项目的数量,这只是一个添加的循环。

标签: rest http-post django-rest-framework


【解决方案1】:

REST 中没有任何内容可以告诉您允许使用哪种有效负载。您可以在列表、字典、XML、URL 编码的键/值或 JSON 中发布/放置您想要的任何内容 - 一个实体表示或多个表示,最适合您的用例。

在您的情况下,您甚至可能希望在客户端上发送更改的 delta/diff 列表:例如,假设您的客户端加载了一些现有的 3 个待办事项。然后用户修改其中一个,删除另一个并添加一个新的。您可以在三个请求中执行此操作,也可以在一个请求中执行编码添加/修改/删除操作的单个请求。两种方法都有效,最佳解决方案取决于您的用例和带宽、处理能力和网络往返时间等限制条件。

【讨论】:

  • 感谢您的回答。我认为在您的示例中,使用具有不同 HTTP 方法(CRUD)的三个请求更合适。我在做你之前说的事情,我只是使用 POST 来创建、更新、检测,并在帖子正文中使用“操作”。但这种方式已经很老了,不是吗?
  • > “但是这种方式已经很老了” ...为什么会这样?选择最适合您的方案的方案。如果延迟和带宽不是问题,那么您的解决方案就可以了。但是 REST 并不禁止批处理操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多