如何定义登录和注销的HTTP方法和状态代码?

时间:2015-10-23 03:27:47

标签: api rest http-status-codes http-method

我提供了一个关于讨论HTTP methodstatus code的常见用户登录/注销示例。我希望它可以帮助人们轻松理解。

传统的没有宁静的api设计:

  

当用户登录/注销网站时,它肯定会通过POST方法的HTTP请求访问后端服务。

这是不容置疑的。

但如果我遵循宁静的api设计模式,它仍然是设计的吗?

我的想法是:

  • 登录
  

Login将在用户登录时生成令牌密钥。我认为这是数据库的创建操作,因为生成令牌密钥,所以它应该返回201 Created状态代码吗?

  • 注销
  

相对而言,Logout将在用户发送令牌并注销时删除令牌密钥。我认为这是db的删除操作,因为删除了令牌密钥,它应该返回204 No content状态代码吗?

虽然我认为它可能符合HTTP方法的含义,但如果我提供或分享此API设计,是否会让其他开发人员感到困惑?

我不知道这个想法是好还是不好。我想听听你的意见。

2 个答案:

答案 0 :(得分:3)

我认为您描述的场景不会让开发人员感到困惑。根据我的经验,您很少会在200,201或204之间进行特殊处理,而典型情况为code >= 200 && code < 300。你的逻辑并不健全。如果您要返回令牌,则201是合理的,如果您没有返回任何内容,则为204

但是,生成令牌实际上是您登录的副作用。POST /login未创建login资源,如POST /items将创建item,和API令牌不是典型的资源。出于这个原因,200 OK更合适,因为您实际上只是授予用户前进到受保护资源的权限,尽管通过创建令牌。如果您四处寻找身份验证示例,那么发送200或重定向用户似乎是典型的解决方案。

答案 1 :(得分:0)

loginlogout 都应该是 POST,因为在某些情况下 GET 可能会被缓存。 注销成功服务器可能会设置响应状态 302 重定向和标头 location: url_to_visit_after_logout