我正在开发一个小的客户端服务器程序来收集订单。我想以"REST(ful)方式“来做这件事。
我想做的是:
收集所有订单行(产品和数量),并将完整的订单发送到服务器
目前,我认为有两种方法可以做到这点:
我实际上不想这样做,因为我想限制对服务器的请求数量,所以选项2:
我应该如何实现选项2?我有两个想法:将所有订单行包装在一个JSON对象中,并将其发送到服务器,或者使用一个数组来发送订单行。
实现选项2是个好主意还是好做法?如果是,我应该怎么做?
什么是好的实践?
发布于 2015-11-18 06:20:25
我认为另一种正确的方法是创建另一个资源来表示您的资源集合。例如,假设我们有一个像/api/sheep/{id}
这样的端点,我们可以通过POST到/api/sheep
来创建一个sheep资源。
现在,如果我们想要支持批量创建,我们应该考虑在/api/flock
(或者/api/<your-resource>-collection
,如果你缺少一个更好的有意义的名字)上有一个新的集群资源。请记住,资源不需要映射到数据库或应用程序模型。这是一个常见的误解。
资源是一种更高级别的表示,与您的数据无关。对资源进行操作可能会产生显著的副作用,比如向用户发出警报、更新其他相关数据、启动长时间进程等。例如,我们可以将文件系统甚至unix ps
命令映射为REST API。
我认为可以放心地假设,操作一个资源可能还意味着创建几个其他实体作为副作用。
发布于 2009-01-08 19:40:34
尽管批量操作(例如批处理创建)在许多系统中是必不可少的,但RESTful架构风格并没有正式处理它们。
我发现你建议的POSTing集合基本上可以工作,但是当你需要报告失败来响应这样的请求时,问题就出现了。当由于不同原因发生多个故障时,或者当服务器不支持事务时,此类问题会更加严重。我给你的建议是,如果没有性能问题,例如当服务提供商在LAN (不是WAN)上或数据相对较小时,向服务器发送100个POST请求是值得的。保持简单,从单独的请求开始,如果你有性能问题,试着优化。
发布于 2014-09-17 03:18:45
脸书解释了如何做到这一点:https://developers.facebook.com/docs/graph-api/making-multiple-requests
简单批处理请求
批处理API接受由JSON数组表示的逻辑HTTP请求数组--每个请求都有一个方法(对应于HTTP method GET/ PUT / POST /DELETE等)、一个relative_url (graph.facebook.com之后的URL部分)、可选的headers数组(对应于headers)和一个可选的主体(用于POST和PUT请求)。Batch API返回一个表示为JSON数组的逻辑HTTP响应数组-每个响应都有一个状态代码、一个可选的标头数组和一个可选的正文(这是一个JSON编码的字符串)。
https://stackoverflow.com/questions/411462
复制相似问题