Django api - 如何使用DestroyAPIView并维护RESTfulness

时间:2017-05-27 14:19:48

标签: django api django-rest-framework

如何使用Django DestroyAPIViewDetailAPIView并仍然保持 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)

我猜两种方式都有效,只要它清晰一致,如下所述。没有" 正确"方式。

1 个答案:

答案 0 :(得分:0)

我不确定'RESTFULness'会影响你在这里问的问题。只要有意义,就可以拥有不同的匹配模式。

在给出的示例中,通常我们没有/api/game/222作为generics.ListCreateAPIView。这是因为List会返回所有游戏的列表,我们不会传递idCreate正在尝试创建新的Game。您还没有id,因为它不在数据库中,因此匹配模式通常都应该是/api/game/

/api/game/222 - 这种模式,我们通常用于generics.RetrieveUpdateDestroyAPIView,因为在网址中有给定的id,我们可以获取正确的Game对象来检索,更新或删除它。

关于Restful API,此stack overflow question中的答案更多地解释了“Restfulness”。