根据权限分离rest API路由是否更好?

根据权限分离rest API路由是否更好?,rest,api,security,permissions,django-rest-framework,Rest,Api,Security,Permissions,Django Rest Framework,我正在开发一个ressource,可以使用put request更新该资源,以根据请求内容更新任何字段。我面临管理此路由权限的问题。某些字段可以由任何用户更新。其他人需要管理特权。我正在解析请求的内容以决定权限。是否有必要根据权限分离路由。更新基本信息。更新一些敏感字段。更新状态(需要管理许可)。我不确定您是否在寻找针对Django REST框架的建议,但由于我对它不熟悉,我将提供我对RESTful设计的总体看法 REST是关于资源的,你可以把它看作一个名词。每个“路由”应该表示一个唯一的资源,

我正在开发一个ressource,可以使用put request更新该资源,以根据请求内容更新任何字段。我面临管理此路由权限的问题。某些字段可以由任何用户更新。其他人需要管理特权。我正在解析请求的内容以决定权限。是否有必要根据权限分离路由。更新基本信息。更新一些敏感字段。更新状态(需要管理许可)。

我不确定您是否在寻找针对Django REST框架的建议,但由于我对它不熟悉,我将提供我对RESTful设计的总体看法

REST是关于资源的,你可以把它看作一个名词。每个“路由”应该表示一个唯一的资源,每个资源应该由一个URI表示。通常,这将遵循
根/collection/resource
模式,其中collection和resource可能会重复。例如:
http://api.halo.com/players/SomeGuy/matches/1234

在您描述的场景中,您正在对该资源进行部分更新(补丁),调用者可以在其中更新一个或多个字段。不管调用方是谁,您仍然希望更新相同的资源。因为您正在对同一个名词进行更改,RESTful约定将规定它是相同的URI


我建议使用一个URI来响应补丁动词并接受调用者希望进行的更改。在验证传入消息的过程中,如果您看到指定的受限字段,并且调用方没有正确的权限,则使用HTTP 403(禁止)进行响应,以表示“我们知道您是谁,但您没有权限执行您要求执行的操作。”

您提到了PUT,但该动词的标准用法是“请用我提供给您的新资源替换您拥有的全部资源。”要像您描述的那样进行部分更新,通常使用补丁动词。