对于存在的网页,但对于没有足够权限的用户(他们未登录或不属于正确的用户组),要提供的正确HTTP响应是什么?401?403?别的什么?到目前为止,我对每个人的看法都不太清楚.哪些用例适合每个响应?
http-status-codes http-response-codes http-headers http-status-code-403 http-status-code-401
我应该为UPDATE(PUT)和DELETE(例如产品成功更新)设置什么状态代码?
我正在创建一个RESTful API来创建强制使用唯一电子邮件地址的用户:
成功POST /users:HTTP 201 Created
如果我POST再次使用相同的电子邮件地址,响应代码应该是什么?是409 Conflict适当的响应代码?
我一直在REST API中使用POST来创建对象.每隔一段时间,服务器就会创建一个对象,但客户端会在收到201 Created响应之前断开连接.客户端只能看到失败的POST请求,稍后再次尝试,服务器会愉快地创建一个重复的对象......
其他人一定有这个问题吧?但我谷歌周围,每个人似乎都忽略了它.
我有2个解决方案:
A)改为使用PUT,并在客户端上创建(GU)ID.
B)向客户端上创建的所有对象添加GUID,并让服务器强制执行UNIQUE-ness.
A与现有框架不匹配,B感觉就像是黑客.在现实世界中,其他人如何解决这个问题?
编辑:
使用Backbone.js,您可以在客户端上创建对象时将GUID设置为id.保存后,Backbone将执行PUT请求.让你的REST后端处理PUT到不存在的id,然后你就设置了.
我知道状态代码418被定义为愚人节的笑话,并且"预计不会被实际的HTTP服务器实现",如维基百科所述.
但是如果你们中的任何人知道支持它的语言/网络服务器/ IDE,我会感兴趣.
我正在尝试Apache(通过php),显然它给我一个内部错误(500).我只是喜欢它背后的幽默(我不想在这里试图)并且想知道是否不仅仅是Emacs实现了这一点.
更确切地说:它可以在php中模拟,例如通过做类似的事情...
header("HTTP/1.1 418 Whatever text I'd like");
Run Code Online (Sandbox Code Playgroud)
...但是你们中的任何人都知道任何实际的服务器软件(或语言)本地实现它,其中类似下面的东西不会抛出500,但实际上工作:
http_response_code(418);
Run Code Online (Sandbox Code Playgroud) 想象一下,我们有一个API,可以通过POST创建一个新的Employee
www.example.com/api/employees
Run Code Online (Sandbox Code Playgroud)
一名员工可以被描述为,
{
name: "John Smith",
tax_number: "ABC123"
}
Run Code Online (Sandbox Code Playgroud)
税号对所有人来说都是独一无二的.如果创建了一个创建,并且已存在一个名称和税号与现有记录匹配的记录,则可以安全地假设请求者想要返回该记录的引用(使用它的内部id和其他数据,客户端可能不会有,例如,创建于,更新于).
HTTP状态代码用于返回该资源的内容是什么?我想重定向可以用于返回id,但我更喜欢将整个对象包含在响应中.
这种情况对于简单的重复错误是唯一的,因为如果尝试重复,则意味着您希望创建的记录已经存在 - 而不是与现有记录冲突.
我有一个POST请求端点,用户重复发布数据.在我将数据插入数据库之前,根据用户请求,我会检查记录是否已经存在. - 如果记录已经存在,我返回200 OK,包含table_id和状态的响应主体 - 如果记录不存在,我创建新记录并返回200 OK,包含table_id和status的响应主体
基本上在这两种情况下,用户获得状态200.由于用户无法区分其是新记录还是现有记录,因此可能会令人困惑.
我以为我会将304返回给响应主体,并告知消费者该请求是"未修改",这样消费者就会做出决定.
这是一个好习惯还是在RESTful主体中有替代方法.
我正在构建 RESTful API,我遇到了一种情况。在用户注册时,如果电子邮件之间已经存在,那么422和409它的HTTP响应代码有道理?
我有过类似的浏览一个和接受的答案是,从2012年其答案是否仍持有好?例子会有很大帮助。