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

And*_*man 1 routes node.js

我正在开发一个小型节点/角度应用程序

\n\n

超级管理员应该能够在直接从节点应用程序传递的视图中创建/编辑/删除新的客户帐户。

\n\n

另一方面,客户端通过 Angular 和节点应用程序提供的 REST API 与后端/数据库进行通信。客户需要用户名/密码才能登录其帐户。

\n\n

问题:我有这个路由图,我是否认为 :client 需要位于 REST API 的 URL 中,以便后端知道要获取哪些数据?

\n\n

url 中的 : 表示它是一个变量...

\n\n
Route map Superadmin\n\n/admin/client \xe2\x80\x93 POST\n/admin/client/:id \xe2\x80\x93 GET\n/admin/client/:id \xe2\x80\x93 PUT\n/admin/client/:id \xe2\x80\x93 DELETE\n/admin/clients \xe2\x80\x93 GET\n\n\nRoute map API JSON\n\n/v1/:client/candidate \xe2\x80\x93 POST\n/v1/:client/candidate/:id \xe2\x80\x93 GET\n/v1/:client/candidate/:id \xe2\x80\x93 PUT\n/v1/:client/candidate/:id \xe2\x80\x93 DELETE\n/v1/:client/candidates \xe2\x80\x93 GET\n\n/v1/:client/settings \xe2\x80\x93 GET\n/v1/:client/settings \xe2\x80\x93 PUT\n
Run Code Online (Sandbox Code Playgroud)\n

dyl*_*nts 5

我认为这个问题有点难以回答,因为它会说一种方法是“正确的”,另一种方法是“错误的”,而实际上可能有多种方法可以解决这个问题。不过,我要说的是关于如何构建 API 端点的内容。

\n\n

如果我们特别关注这些 API 端点:

\n\n
/v1/:client/candidate \xe2\x80\x93 POST\n/v1/:client/candidate/:id \xe2\x80\x93 GET\n/v1/:client/candidate/:id \xe2\x80\x93 PUT\n/v1/:client/candidate/:id \xe2\x80\x93 DELETE\n/v1/:client/candidates \xe2\x80\x93 GET\n\n/v1/:client/settings \xe2\x80\x93 GET\n/v1/:client/settings \xe2\x80\x93 PUT\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里我们有一组 API,允许某人查找特定的资源并对其执行操作client。在此过程中,您实际上已将其开放,以允许任何人访问任何人的数据(直到您添加安全性)。像您在问题中描述的那样,构建这样的 API 对于“超级管理员”来说会更有用,因为他们需要全天访问多个客户端配置文件。但正如您可能想象的那样,您需要将对这些端点的访问限制为只有那些具有“超级管理员”访问权限或实际上是客户端本身的人。

\n\n

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

\n\n
/v1/candidate \xe2\x80\x93 POST\n/v1/candidate/:id \xe2\x80\x93 GET\n/v1/candidate/:id \xe2\x80\x93 PUT\n/v1/candidate/:id \xe2\x80\x93 DELETE\n/v1/candidates \xe2\x80\x93 GET\n\n/v1/settings \xe2\x80\x93 GET\n/v1/settings \xe2\x80\x93 PUT\n
Run Code Online (Sandbox Code Playgroud)\n\n

由于您提到客户端需要登录才能使用这些 API,因此您在发出请求时已经知道客户端是谁。您可以改为从请求中查找客户端,并根据拨打电话的人访问这些资源。我个人认为这使得事情更容易遵循,因为请求总是要求我的数据,而不是一些“客户”的数据,然后您需要验证他们是否有权访问这些数据。

\n\n

但这一切都取决于您如何构建应用程序、用例是什么、谁将访问系统等等。将“超级管理员”API 与普通“客户端”分开可能是有意义的像我上面描述的 API,或者将它们放在一起可能会更好。从长远来看,答案可能是哪个更容易理解和维护。

\n