路由映射REST API的“正确”方法

我工作在一个小节点/angular应用程序

superadmin应该能够在节点应用程序直接传送的视图内创build/编辑/删除新的客户帐户。

另一方面,客户端通过节点应用程序提供的Angular和REST API与后端/数据库通信。 客户需要用户名/密码login到他们的帐户。

问题:我有这个路由图,是不是认为:客户端需要在REST API的URL中,所以后端知道要获取哪些数据?

:在url中指出,这是一个variables…

Route map Superadmin /admin/client – POST /admin/client/:id – GET /admin/client/:id – PUT /admin/client/:id – DELETE /admin/clients – GET Route map API JSON /v1/:client/candidate – POST /v1/:client/candidate/:id – GET /v1/:client/candidate/:id – PUT /v1/:client/candidate/:id – DELETE /v1/:client/candidates – GET /v1/:client/settings – GET /v1/:client/settings – PUT 

我觉得这有点难以回答,因为这样说的方式是“正确的”,而另一种是“错误的”,真的可以有多种方式来解决这个问题。 以下是我要说的,围绕着如何构buildAPI端点。

如果我们专注于这些API端点:

 /v1/:client/candidate – POST /v1/:client/candidate/:id – GET /v1/:client/candidate/:id – PUT /v1/:client/candidate/:id – DELETE /v1/:client/candidates – GET /v1/:client/settings – GET /v1/:client/settings – PUT 

在这里,我们有一组API,允许某人查找并针对特定client资源执行操作。 在这样做的时候,你已经打开了这个界面,允许任何人访问任何人的数据(直到你添加了安全性)。 像这样构buildAPI对于你的问题中描述的“superadmin”会更有用,因为它需要在整个一天访问多个客户端configuration文件。 但是,正如你所想象的那样,你需要限制对这些端点的访问权限,只允许那些有“superadmin”权限的用户或者实际上是客户端本身。

相反,如果这些API端点的主要用例是为客户端提供服务,那么我将删除:client参数:

 /v1/candidate – POST /v1/candidate/:id – GET /v1/candidate/:id – PUT /v1/candidate/:id – DELETE /v1/candidates – GET /v1/settings – GET /v1/settings – PUT 

由于您提到客户端需要login才能点击这些API,因此您在发出请求时已经知道客户端是谁。 您可以改为从请求中查找客户端,并根据谁正在进行呼叫来访问这些资源。 就我个人而言,我认为这使得事情变得容易一些,因为请求总是要求我的数据,而不是一些“客户端”数据,然后你需要validation他们有权访问数据。

但是,这一切都是基于你如何构build你的应用程序,什么是用例,谁将访问系统等等。把“superadmin”API和普通的“客户”API分开是有道理的,比如I上面已经描述过,或者把它们放在一起可能会更好。 答案可能最终会变得更容易理解和维护。