嵌套路由器与过滤器
Nested router vs filters
我对 API 从头开始实施还很陌生,我需要一些关于我的 API 结构中的标准或最佳方法的建议。
目前我的实现包括嵌套路由器(drf-nested-routers 包),例如
"www.thissite.com/store/21/products/1/"
现在,当我深入研究 django 时,我发现有一些过滤器可以让我用更少的代码来完成与上面完全相同的操作
"www.thissite.com/products/?store__id=21&id=1"
我的问题是哪一个是最佳做法,为什么?
如果产品总是与商店相关(考虑到名称,这似乎是这种情况),那么它被认为是 REST 的最佳实践,通过使 products
成为子资源来维护层次结构stores
个。因此,我建议您遵循上述第一种方法。
过滤应该用于根据某些内部特征(例如 class 属性)过滤资源,而不是基于与其他资源的关系。
两者都是最佳实践,因为 REST 不限制 URI 设计。我称 www.thissite.com/store/21/products/1/
分层 URI 设计和 www.thissite.com/products/?store__id=21&id=1
平面 URI 设计。我更喜欢平面设计,但这只是我个人的品味。如果您需要 store-id
和 product-id
来识别产品,那么这些 URI 是可以的,并且任何 URI 都可以使用这些变量,例如 x/y/z/:pid/q/r/s/:sid
,等等......通过 REST URI(模板)创建是服务的责任,客户端仅使用它以超链接形式从服务获取的 URI。所以从 REST 客户端的角度来看,URI 结构并不重要。我们倾向于设计好的 URI 只是为了保持 REST 服务路由逻辑清晰。
我对 API 从头开始实施还很陌生,我需要一些关于我的 API 结构中的标准或最佳方法的建议。
目前我的实现包括嵌套路由器(drf-nested-routers 包),例如
"www.thissite.com/store/21/products/1/"
现在,当我深入研究 django 时,我发现有一些过滤器可以让我用更少的代码来完成与上面完全相同的操作
"www.thissite.com/products/?store__id=21&id=1"
我的问题是哪一个是最佳做法,为什么?
如果产品总是与商店相关(考虑到名称,这似乎是这种情况),那么它被认为是 REST 的最佳实践,通过使 products
成为子资源来维护层次结构stores
个。因此,我建议您遵循上述第一种方法。
过滤应该用于根据某些内部特征(例如 class 属性)过滤资源,而不是基于与其他资源的关系。
两者都是最佳实践,因为 REST 不限制 URI 设计。我称 www.thissite.com/store/21/products/1/
分层 URI 设计和 www.thissite.com/products/?store__id=21&id=1
平面 URI 设计。我更喜欢平面设计,但这只是我个人的品味。如果您需要 store-id
和 product-id
来识别产品,那么这些 URI 是可以的,并且任何 URI 都可以使用这些变量,例如 x/y/z/:pid/q/r/s/:sid
,等等......通过 REST URI(模板)创建是服务的责任,客户端仅使用它以超链接形式从服务获取的 URI。所以从 REST 客户端的角度来看,URI 结构并不重要。我们倾向于设计好的 URI 只是为了保持 REST 服务路由逻辑清晰。