我正在创建支持RESTful
有效负载的frontend
个端点。
我的有效负载是build your own
菜和ready-made single dish
问题:
在单POST
frontend
中。他想把所有东西都放到一次。在给定的list
中,这意味着将包含2种类型的字典
一个用于build your own
,另一个用于ready-made single dish
IMO:
对于每种类型的有效载荷,他可以POST
2次。通过这种方法,端点将做一件事,我更喜欢这种方式。
他只有一个理由POST
一切都是单一终点
问题:
对于这类问题,你最好的做法是什么?
建立自己的有效负载
简而言之,我称之为BYO
1. base_bowl
将指示项目的size
和price
1. base_bowl
还将确定fishes
,toppings
,sauces
的数量。
因为base_bowl
大小S,M或L具有不同的配额。
例如
大小S可以有fishes
1个勺子大小S,toppings
2个大小为S的勺子。
大小M可以有fishes
2个大小为M的勺子,toppings
3个勺子大小为M.
然后,如果客户想要添加超过配额,他必须将其添加到{ {1}},extra_fishes
基于extra_toppings
ID,因为Price
由列表中的成员数决定。
quantity
后端将验证输入并将其插入 {
"base_bowl": salad.id, # require=True, Price id
"fishes": [salmon.id, tuna.id],
"extra_fishes": [tofu.id],
"toppings": [tamago.id, mango.id],
"extra_toppings": [rambutan.id],
"premium_toppings": [ikura.id],
"sauces": [shoyu.id, spicy_kimchi.id],
"extra_sauces": [],
"sprinkles": [sesame.id, fried_shalots.id],
"dish_order": 1, # require=True
"note": {
'msg': 'eat here',
},
}
和Order
现成菜:
这非常简单,因为它没有像OrderItem
那样的隐含逻辑。只需将BYO
添加到OrderItem
使用Order
ID,尺寸和Menu
来确定价格。因为客户可以自由选择
qty
答案 0 :(得分:0)
我的回答是自以为是,但对我来说,通过保持端点具体和明确定义,RESTful设计更加清晰。因此,在您的情况下,可能会有BYODishViewSet
和ReadyMadeDishViewSet
映射到/api/byodish/
和/api/readymadedish/
。
但是,如果这是更大的单个模型的一部分,比如Order
模型,那么您可能需要考虑使用嵌套(可写)序列化程序将订单包装为单个API请求 - 响应。