嵌套路由器与过滤器

时间:2016-09-18 22:06:36

标签: django rest django-rest-framework drf-nested-routers

我从头开始对API实现很陌生,我需要一些关于API结构中标准或最佳方法的建议。

目前我的实现包括嵌套路由器(drf-nested-routers package),例如

“www.thissite.com/store/21/products/1 /”

现在,当我深入研究django时,我发现有些过滤器允许我使用少量代码完成上述完全相同的操作

“www.thissite.com/products/?store__id=21&id=1”

我的问题是哪一个是最佳实践?为什么?

2 个答案:

答案 0 :(得分:0)

如果产品始终与商店相关(在给定名称的情况下似乎是这种情况),那么它被认为是REST的最佳实践,通过制作products来维护层次结构stores的子资源。因此,我建议你遵循上面提到的第一种方法。

过滤应该用于根据某些内部特征(例如类属性)过滤资源,而不是基于与其他资源的关系。

答案 1 :(得分:0)

两者都是最佳实践,因为REST不限制URI设计。我调用www.thissite.com/store/21/products/1/分层URI设计和www.thissite.com/products/?store__id=21&id=1平面URI设计。我更喜欢平面设计,但这只是我的个人品味。如果您需要store-idproduct-id来识别产品,那么这些URI就可以了,任何URI都可以使用这些变量,例如x/y/z/:pid/q/r/s/:sid等等......通过REST URI(模板)创建是服务的责任,客户端仅使用以超链接形式从服务获取的URI。因此,从REST客户端的角度来看,URI结构并不重要。我们倾向于设计好的URI只是为了保持REST服务路由逻辑的清晰。