例如,我们有Users
和Products
,每个用户都可以申请每件商品的优惠券。该标志存储如下:
Users_Products
{"user_id": 1, "product_id": 1, "is_coupon_requested": true, "requested_at": "2016-04-01"},
{"user_id": 1, "product_id": 2, "is_coupon_requested": false, "requested_at": "2016-04-21"},
{"user_id": 2, "product_id": 1, "is_coupon_requested": true, "requested_at": "2016-06-01"},
:
在某些时候,管理员用户希望通过指定产品ID和优惠券数X
来向用户分发实际的优惠券代码,以便最早X
{{1}的用户可以获得优惠券代码。
所以我想按批量插入操作的方式插入以下数据。
requested_at
在这种情况下,首先我尝试应用像ASCII这样的RESTful URL
Users_Coupons
{"user_id": 1, "product_id": 1, "coupon_code": "ABXXYZ", "is_redeemed": false},
:
但是这会跳过POST /users/products/:product_id/coupons
的资源标识符。我不确定这样做是否常见。
当然我可以先让客户打电话
users
然后检索所有user_ids并在此之后发出POST请求。
但是如果可能的话,我想实现这个只有一个单独的API调用,因为服务器也知道应该分配优惠券给谁,条件可能不会改变。
我还看到了Facebook和Google的GET /users?product_id={product_id}&is_coupon_requested=true&sort=is_requested_at&limit=X
操作方法,
https://developers.facebook.com/docs/graph-api/making-multiple-requests
这实现了我想做的事情,但我觉得它对于一个没有提供这么多API的小型系统而言过度杀戮。
或仅仅Batch
更好吗,因为我无法指定POST /products/:product_id/coupons
?
我想知道这种需求的共同或最佳实践。感谢。
答案 0 :(得分:1)
您可以执行以下操作:
POST /products/:productId/users/:userId
然后让服务器使用提供的:productId和numberOfCoupons进行批量插入。 PUT与POST的选择取决于您希望如何处理对此资源的多次调用。也就是说,它是否是idempotent
或者仅仅POST / products /:product_id /优惠券更好,因为我 无法指定user_id?
如果你愿意,没有什么能阻止你指定user_id:
...
.attr("id",function(d){ return "id-"+d;})
...
d3.select("#id-50").append("text").attr("id",202)
虽然我认为后者并不是你所追求的,因为你只想根据产品y分配一些x优惠券。