我正在创建一个RESTful应用程序接口,用于创建强制使用唯一电子邮件地址的用户:
成功的POST /users
:HTTP 201 Created
如果我再次POST
相同的电子邮件地址,响应码应该是什么?409 Conflict
是合适的响应代码吗?
发布于 2012-02-14 09:15:05
是的,409是这里最合适的响应代码。即使你最有可能在成功时返回201,你仍然是一个被描述为集合的资源的POSTing,并且POSTing一个重复的电子邮件肯定与作为集合的“资源的当前状态”相冲突。如果可能,您应该返回一个包含问题描述和帮助解决问题的超链接的响应正文。
发布于 2015-09-12 03:45:12
虽然接受的答案在显示任务的正确状态代码方面是正确的,但我想补充的是,您正在引入一个安全漏洞。
如果您为帐户注册返回409,那么您只是公开了一个用于帐户枚举的服务。
取决于应用程序,如果api是公共的,等等,你可能想要返回201,即使帐户没有被创建。
发布于 2017-09-14 21:39:27
+1到Barts应答-出于安全原因。通常我会同意409是一个很好的状态码。它已经存在了。但在用户帐户/身份验证/授权等环境中,我倾向于不公开数据库中现有的用户帐户。
当然,在这个地方还有其他处理安全性的机制。如果您不介意公开少量的帐户,您可以在应用程序中添加一个行为,从一个IP返回多个409事件的401或403。
另一种选择(通常)是自己定义一个状态代码,使其具有不同于现有标准2xx变体的2xx。如果您不想将“已存在”作为错误处理,则可以选择此选项。但是,这将被视为非标准的,并且将具有与您的具体示例中的409相同的不安全字符。
https://stackoverflow.com/questions/9269040
复制相似问题