我一直在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,然后你就设置了.
在RESTful SOA中,假设我通过AJAX发出POST请求,但在请求超时之前我没有得到响应.进一步假设重新提交请求将是有害的.POST不是幂等的.例如,也许我正在发布银行转帐.如果我没有收到回复,我不知道服务器是否处理了请求.
假设我可以控制客户端和服务端,那么处理此问题的最佳做法是什么?
我最初的想法是在每个POST请求中包含一个nonce(即一个伪id;某种唯一标识符); 例如,也许是If-None-Match标头中的值.使用这种方法,客户端可以以编程方式重新发出具有相同伪id的超时请求,如果服务器包含重复值,则服务器可以拒绝它.
我们在 Web 逻辑服务器 11g 中面临长时间运行线程的问题。
实际发生的情况是,当我们在应用程序中发出请求时,如果与请求关联的线程耗时超过 5 分钟。我们的 weblogic 服务器 11g 正在为同一请求创建一个新线程。这意味着 5 分钟后我们有 2 个长时间运行的线程来处理相同的请求(10 分钟后我们将有 3 个,依此类推)。这件事每 5 分钟重复一次,weblogic 服务器中的所有线程都被攻击,最后服务器进入“警告”状态,应用程序挂起。
我怀疑这是会话复制问题,但我们没有使用任何集群环境,所以我相信会话复制不会是服务器出现这种奇怪行为的原因。
非常感谢有关如何解决此问题的任何建议。