【发布时间】:2014-08-30 21:07:31
【问题描述】:
在我的应用程序中,我有 Draw 的概念,并且 Draw 必须始终包含在 Order 中。
Draw 有一组属性:background_color, font_size, ...
引用著名的 REST 论点:
任何可以命名的信息都可以是资源:文档或 图像,时间服务(例如“洛杉矶今天的天气”), 其他资源的集合,一个非虚拟对象(例如一个人), 等等。
所以,我在这里收集的其他资源将是一个订单。订单是一组抽奖(通常超过数千)。我想让用户创建一个带有多个 Draws 的订单,这是我的第一种方法:
{
"order": {
"background_color" : "rgb(255,255,255)", "font_size" : 10,
"draws_attributes": [{
"background_color" : "rgb(0,0,0)", "font_size" : 14
}, {
"other_attribute" : "value",
},
]
}
}
对此的响应如下所示:
"order": {
"id" : 30,
"draws": [{
"id" : 4
}, {
"id" : 5
},
]
}
}
这样用户就会知道在数据库中创建了哪些资源。但是,当请求中有很多抽奖时,由于所有这些抽奖都插入到数据库中,因此响应需要一段时间。想象一下,如果订单有 10.000 次抽奖,则执行 10.000 次插入。
由于我需要向用户提供刚刚创建的绘图的 ID(顺便说一下,创建但尚未完成,因为在处理订单时,我们实际上使用一些图像处理库构建了绘图),所以他们可以稍后获取它们,我看不到如何以 RESTful 方式处理此问题,避免使 HTTP 请求花费大量时间,但同时为用户提供某种用于抽奖的 Id,以便他们可以获取它们稍后。
遇到这种情况你是怎么处理的?
【问题讨论】:
标签: web-services rest api-design nested-resources