login 和 get profile 应该是两个不同的 api 端点吗?

Should login and get profile be two different api endpoints?

我正在为移动应用程序设计 api。 我不确定我是否应该有一个端点 login 它将 return 令牌和用户配置文件
或者有两个端点并在 login 调用 getProfile 端点之后。
我看到人们大多使用第二种选择,但我看不到这种方法的好处?

考虑 single-responsibility 原则(基本上说“API 方法应该真正做好一件事”),我建议将它们分成两个独立的部分:

  1. POST /login 将建立一个会话,return 会话 ID 将在后续请求中使用。
  2. 如果提供了有效的会话 ID,
  3. GET /profile 将 return 配置文件信息。

将这些结合起来沿着“快乐之路”有明显的好处,主要是在登录操作完成后,您会自动为用户提供他们接下来最明显想要的数据(用户是谁)。为什么要浪费一个额外的 API 电话来找出它,对吧?

如果这就是您 API 需要支持的全部内容,那么没有理由将它们分开。但有几个案例我可以想到为什么你可能希望它们分开:

  1. 如果现有 logged-in 用户想要获取最新的个人资料信息怎么办?这意味着您无论如何都必须支持 GET /profile(或者让他们再次 POST /login,这是浪费)。
  2. 如果配置文件信息已缓存并且 POST /login API 调用仅发生在应用程序内的 re-authenticate 用户以完成操作怎么办?发送不需要的数据会浪费带宽。

此外,当您让每个 API 方法执行它们暗示它们所做的一件事时,测试通常会更容易一些(POST /login 登录用户,GET /profile 获取当前logged-in 用户的个人资料)。