为用户管理定义 REST 端点的正确方法
Correct way of defining REST endpoints for user management
我有一个典型的用户管理模块,我想为其创建 REST API。用户应该能够访问 his/her 详细信息,但不应被允许访问其他用户详细信息。作为管理员用户应该能够获取任何用户或删除任何用户。
这就是我计划创建 URL 终点的方式,有什么建议吗?
# To create/register user
POST /api/users/
# or
POST /api/register/
# To get all users
# This will be allowed to access only by admins.
GET /api/users/
# To get current user.
# For admin, allowed
# For regular user, id will be validated against userid stored in the session.
GET /api/users/<id>/
# To update current user.
# This id will be validated against userid stored in the session.
PUT /api/users/<id>/
# To delete current user.
# For admin, allowed
# This id will be validated against userid stored in the session.
DELETE /api/users/<id>/
# Login
POST /api/login/
# Logout
GET /api/logout/
谢谢
一般建议是使您的 REST API 无状态 - 即,如果不是在 api session 中保留用户 ID,调用者会发送身份证明(带有身份验证header) 在 api 请求中。然后 api 将从 header 检索用户,在执行任何核心操作之前检查该用户是否具有足够的权限(可以使用某种拦截器)。
检查此以获取更多详细信息 - https://whosebug.com/a/20311981/1384048
我认为你的端点方案非常好。唯一的问题是上下文将是传入的用户(来自 url 路径)而不是 current 用户。
# To create
POST /api/users
# To get all users
GET /api/users
# To get particular user.
GET /api/users/<id>
# To update particular user.
PUT /api/users/<id>
# To delete particular user
DELETE /api/users/<id>
我有一个典型的用户管理模块,我想为其创建 REST API。用户应该能够访问 his/her 详细信息,但不应被允许访问其他用户详细信息。作为管理员用户应该能够获取任何用户或删除任何用户。
这就是我计划创建 URL 终点的方式,有什么建议吗?
# To create/register user
POST /api/users/
# or
POST /api/register/
# To get all users
# This will be allowed to access only by admins.
GET /api/users/
# To get current user.
# For admin, allowed
# For regular user, id will be validated against userid stored in the session.
GET /api/users/<id>/
# To update current user.
# This id will be validated against userid stored in the session.
PUT /api/users/<id>/
# To delete current user.
# For admin, allowed
# This id will be validated against userid stored in the session.
DELETE /api/users/<id>/
# Login
POST /api/login/
# Logout
GET /api/logout/
谢谢
一般建议是使您的 REST API 无状态 - 即,如果不是在 api session 中保留用户 ID,调用者会发送身份证明(带有身份验证header) 在 api 请求中。然后 api 将从 header 检索用户,在执行任何核心操作之前检查该用户是否具有足够的权限(可以使用某种拦截器)。
检查此以获取更多详细信息 - https://whosebug.com/a/20311981/1384048
我认为你的端点方案非常好。唯一的问题是上下文将是传入的用户(来自 url 路径)而不是 current 用户。
# To create
POST /api/users
# To get all users
GET /api/users
# To get particular user.
GET /api/users/<id>
# To update particular user.
PUT /api/users/<id>
# To delete particular user
DELETE /api/users/<id>