如何使用Django DestroyAPIView
和DetailAPIView
并仍然保持 RESTfulness 的普遍接受的做法?
如果我正确理解 REST ,它应该如下工作(只有一个例子)
/api/game/222
然后创建Django中的1个视图类(generics.DetailAPIView
)或方法来处理调用
在REST世界中,我相信我们会使用通用API类来处理 方法(get,...)
但是如果我想使用类(generics.DestroyAPIView
)来处理删除游戏的调用。
然后我将不得不使用
/api/game/delete/222
将请求发送到正确的视图。
在我看来,这与 RESTFULness 不一致。
对于HTTP的删除方法,应使用发送删除请求并使用相同的模式匹配/apt/game/222
来删除游戏。这是多余的。
问题:我错过了什么吗?
总结
选项1:
/api/game/delete/222 (DestroyAPIView)
/api/game/detail/222 (DetailAPIView)
选项2
/api/game/222 (RetrieveDestroyAPIView)
我猜两种方式都有效,只要它清晰一致,如下所述。没有" 正确"方式。
答案 0 :(得分:0)
我不确定'RESTFULness'会影响你在这里问的问题。只要有意义,就可以拥有不同的匹配模式。
在给出的示例中,通常我们没有/api/game/222
作为generics.ListCreateAPIView
。这是因为List
会返回所有游戏的列表,我们不会传递id
。Create
正在尝试创建新的Game
。您还没有id
,因为它不在数据库中,因此匹配模式通常都应该是/api/game/
。
/api/game/222
- 这种模式,我们通常用于generics.RetrieveUpdateDestroyAPIView
,因为在网址中有给定的id
,我们可以获取正确的Game
对象来检索,更新或删除它。
关于Restful API,此stack overflow question中的答案更多地解释了“Restfulness”。