当前用户与 ID 的 REST 端点

REST Endpoints for Current User vs ID

就 REST API 而言,通常遵循哪种结构更好?

假设所有资源为 GET/PUT/POST/DELETE

1) 将当前登录的用户用于 /users/**/* 路由。

/users
/users/password
/users/email
/users/preferences
/users/documents
/documents/:id

2) 具有带 ID 的绝对路径并对当前登录的用户使用 /users/:id

/users
/users/:id/password
/users/:id/email
/users/:id/preferences
/preferences/:id

重要吗?

两个都很好。为每个用户创建唯一端点的好处在于,有一天您可以允许用户 X 访问有关用户 Y 的信息。

我在最近 API 中遵循的模式是为每个用户创建一个唯一的端点,但是 1 个端点 /current-user 重定向到 /user/:some-id.

A url 可能表示身份。其他资源可能将用户称为某物的 'creator' 或 'modifier' 很有意义,在这些地方您可能想使用 url (而不仅仅是用户 ID ).

如果您引用的资源可以是多个,您应该选择

/resource/resource_id

在上面的例子中,用户只能是当前的人,所以使用像 /users/user_id 这样的模式听起来很奇怪。因为,您将不得不处理不同的情况,例如如果登录 USER A 触发具有不同用户 ID USER B[= 的 api 调用会怎样? 22=]??

您可以使用 /profile 之类的命名空间来管理电子邮件、姓名、图像等。您不必将其设置为 /users/profile,因为它暗示数据将要被当前登录用户操作/访问。