[WARN][TiAPI ( 480)] [REST API] apiCall [object Object]
[WARN][TiAPI ( 480)] [REST API TYPE] apiCall POST
[WARN][TiAPI ( 480)] [object Object]
[WARN][TiAPI ( 480)] [REST API] apiCall [object Object]
[WARN][TiAPI ( 480)] [REST API TYPE] apiCall PUT
当我第一次点击服务时,服务会以类型POST调用,但第二次发送PUT而不是POST。我怎么能一直让请求类型POST。
答案 0 :(得分:2)
Backbone会执行POST,因为它不知道将PUT提供给的具体URL。但是,当您事先知道URL时,PUT是正确的方法。默认情况下,Backbone使用“id”属性(如果存在)来构建URL。因此,如果没有“id”,它会假设您希望服务器填充它,如下所示:
=>
POST {"foo":"bar"} /things
<=
200 OK {"foo":"bar","id":"a36f933"}
但是,如果您在客户端上生成id,或者您已经知道了id,则Backbone将执行PUT,并假设服务器将接受它,如下所示:
=>
PUT {"foo":"bar","id":"12345abc"} /things/12345abc
<=
200 OK {"foo":"bar","id":"12345abc"}
这完全符合RESTful URL的工作方式以及非幂等POST请求背后的意图和含义,以及幂等PUT请求。如果你理解幂等性,Backbone的行为就会开始变得有意义:)
http://en.wikipedia.org/wiki/Idempotence
http://quoderat.megginson.com/2011/11/17/post-put-idempotence-and-self-identification/
答案 1 :(得分:1)
Backbone 默认 使用CRUD
与数据端点同步。这意味着第一个API调用是POST
(用于创建操作),然后,在第二次调用时,由于模式有id
,Backbone将发送{{ 1}}(用于更新操作)
要强制使用PUT
,您需要覆盖Backbone.sync。