在 REST API 中处理用户 Preferences/States
Handling User Preferences/States in REST API
我们开始将我们的网站迁移到基于 REST 服务的系统,并且目前正在开发核心。
在我们当前的设置中,为用户分配了一个或多个 "accounts",用于定义他可以在网站上看到的数据。同一用户在任何时候都只能激活一个帐户。现在我们将所选帐户存储在数据库中并使用它来过滤所有查询。
现在我不确定如何在 REST 环境中正确处理这个问题。我找到的可能解决方案是:
- 随每个请求发送请求的帐户
- 将当前帐户存储在授权令牌中。 (我们为此使用 JWT)
- 将当前帐户存储在服务器上并调用特定资源来更改它
对于我们的设置,每一个都有其优点和缺点。目前我们在我们的网站上使用第三种方法。但是在 REST 环境中处理这种事情的正确方法是什么?
是的,您正在处理的设计相当糟糕,您真正想要做的是将状态从该系统中完全移除。
出于这个原因,第一个选项要好得多:
Sending the requested account with every request
如果这只是一个 ID,有一种非常简单的方法可以做到这一点,只需在所有(相关的)路由/URI 前加上这个帐户 ID。例如:
http://api.example.org/accounts/{id}/...
这样 'state' 通过您正在访问的 url 维护,并且服务器可以不知道该状态。
我们开始将我们的网站迁移到基于 REST 服务的系统,并且目前正在开发核心。
在我们当前的设置中,为用户分配了一个或多个 "accounts",用于定义他可以在网站上看到的数据。同一用户在任何时候都只能激活一个帐户。现在我们将所选帐户存储在数据库中并使用它来过滤所有查询。
现在我不确定如何在 REST 环境中正确处理这个问题。我找到的可能解决方案是:
- 随每个请求发送请求的帐户
- 将当前帐户存储在授权令牌中。 (我们为此使用 JWT)
- 将当前帐户存储在服务器上并调用特定资源来更改它
对于我们的设置,每一个都有其优点和缺点。目前我们在我们的网站上使用第三种方法。但是在 REST 环境中处理这种事情的正确方法是什么?
是的,您正在处理的设计相当糟糕,您真正想要做的是将状态从该系统中完全移除。
出于这个原因,第一个选项要好得多:
Sending the requested account with every request
如果这只是一个 ID,有一种非常简单的方法可以做到这一点,只需在所有(相关的)路由/URI 前加上这个帐户 ID。例如:
http://api.example.org/accounts/{id}/...
这样 'state' 通过您正在访问的 url 维护,并且服务器可以不知道该状态。