Django 返回资源的范围对JWT令牌中编码的用户角色高度不要求-它是RESTful的吗?

Django 返回资源的范围对JWT令牌中编码的用户角色高度不要求-它是RESTful的吗?,django,rest,flask,Django,Rest,Flask,虽然有一个需求一直困扰着我,但我正在开发一个试图遵循RESTful原则的API 我们使用基于JWT的身份验证。在JWT内部,我们存储用户的角色。现在,我们的主要GET端点(为了简单起见,我们称之为ListAllOffers)的行为因用户的角色而异: 如果API通过JWT识别admin,它会给出完整的报价列表 如果API通过JWT识别普通用户,它会以缩小的报价列表(取决于DB中的关系)作出响应 我关心的是:根据REST原则或任何不成文的REST实践,它可以吗?我习惯于根据url中的参数、que

虽然有一个需求一直困扰着我,但我正在开发一个试图遵循RESTful原则的API

我们使用基于JWT的身份验证。在JWT内部,我们存储用户的角色。现在,我们的主要GET端点(为了简单起见,我们称之为ListAllOffers)的行为因用户的角色而异:

  • 如果API通过JWT识别admin,它会给出完整的报价列表
  • 如果API通过JWT识别普通用户,它会以缩小的报价列表(取决于DB中的关系)作出响应
我关心的是:根据REST原则或任何不成文的REST实践,它可以吗?我习惯于根据url中的参数、querystring中的参数或通过标头值修改响应对象。基于JWT修改JSON响应似乎不够明确,这感觉有点奇怪



额外的问题:这是否违反了REST原则?如何实现这一要求。

您会发现许多API都有资源,其值会根据经过身份验证的用户而变化(请参阅)

当涉及REST时,端点必须始终引用相同的资源。但是,您可以选择以任何方式表示该资源。由于用户不是管理员而屏蔽某些优惠,因此未更改资源,仅更改您提供给该用户的表示方式

虽然没有任何因授权而改变陈述的具体例子,但它仍然值得一读

如果您关心隐式地更改表示,那么有几个选项可供选择,使其更显式,同时仍然遵循RESTful标准

您可以添加一个仅显式请求当前用户提供的查询参数:
/offers?show=mine

如果优惠是用户的“所有者”,您还可以执行以下操作:
/users/{username}/offers
。在这里,用户将被授权只提供他们自己的产品。管理员当然会被授权进行任何操作

总的来说,关键点是:端点必须始终表示相同的资源,但其表示方式取决于您