我提供了一个关于讨论HTTP method
和status code
的常见用户登录/注销示例。我希望它可以帮助人们轻松理解。
传统的没有宁静的api设计:
当用户登录/注销网站时,它肯定会通过
POST
方法的HTTP请求访问后端服务。
这是不容置疑的。
但如果我遵循宁静的api设计模式,它仍然是设计的吗?
我的想法是:
Login
将在用户登录时生成令牌密钥。我认为这是数据库的创建操作,因为生成令牌密钥,所以它应该返回201 Created
状态代码吗?
相对而言,
Logout
将在用户发送令牌并注销时删除令牌密钥。我认为这是db的删除操作,因为删除了令牌密钥,它应该返回204 No content
状态代码吗?
虽然我认为它可能符合HTTP方法的含义,但如果我提供或分享此API设计,是否会让其他开发人员感到困惑?
我不知道这个想法是好还是不好。我想听听你的意见。
答案 0 :(得分:3)
我认为您描述的场景不会让开发人员感到困惑。根据我的经验,您很少会在200,201或204之间进行特殊处理,而典型情况为code >= 200 && code < 300
。你的逻辑并不健全。如果您要返回令牌,则201
是合理的,如果您没有返回任何内容,则为204
。
但是,生成令牌实际上是您登录的副作用。POST /login
未创建login
资源,如POST /items
将创建item
,和API令牌不是典型的资源。出于这个原因,200 OK
更合适,因为您实际上只是授予用户前进到受保护资源的权限,尽管通过创建令牌。如果您四处寻找身份验证示例,那么发送200
或重定向用户似乎是典型的解决方案。
答案 1 :(得分:0)
login
和 logout
都应该是 POST,因为在某些情况下 GET 可能会被缓存。
注销成功服务器可能会设置响应状态 302 重定向和标头 location: url_to_visit_after_logout