嵌套路由器vs过滤器



我对API实现非常陌生,我需要一些关于我的API结构的标准或最佳方法的建议。

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

" www.thissite.com/store/21/products/1/"

现在,随着我对django的深入研究,我发现有一些过滤器可以让我用更少的代码完成与上面完全相同的操作,就像这样

" www.thissite.com/products/? store__id = 21, id = 1"

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

都是最佳实践,因为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服务路由逻辑的清晰。

如果产品总是与商店相关(给定名称似乎就是这种情况),那么通过使products成为stores的子资源来维护分层结构被认为是REST的最佳实践。因此,我建议您采用上述第一种方法。

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

最新更新