REST API - To PUT or to POST?
Possible Duplicate:
PUT vs POST in REST
我知道这已经讨论了很多,虽然我有点理解,但我并没有完全理解。 我想如果有人可以通过以下示例回答这个问题,那么这将使其易于理解。
创建新用户 - 将新用户添加到发送用户名,密码,电子邮件的数据库。 PUT还是POST?
我想也许是PUT,因为我不想拥有重复的用户,PUT就像删除和替换。 但是,我有检查,以避免用户被添加两次,所以也许我应该使用POST?
更新用户 - 更改电子邮件或密码。 PUT还是POST?
我可以使用URI api / update / my_username,然后通过正文发送新的电子邮件,那么这应该是PUT吗? 我也可以在URI中发送所有内容,例如api/update/my_username/email/[email protected]
创建 - POST,更新 - PUT,删除 - 删除。
为了更好地理解HTTP Verbs的使用,请查看RFC
http://tools.ietf.org/html/rfc2616
此外,PUT请求可以创建实体,但是应该创建201响应代码而不是200 OK和204 No Content。 但这取决于您是否允许/实施此类行为。
-
我认为电子邮件是在体内还是在uri中并不重要,至少在安全方面是这样。如果你可以阅读标题,你可以阅读正文。
-
关于REST的第一次阅读我决定创建 - POST,更新 - PUT,删除 - 删除但它似乎并不那么简单。 jcalcote.wordpress.com/2008/10/16/
-
@Paul Benbow是的,它不是那么简单,有细微差别,这就是为什么我附加到RFC的链接(所有细微差别都在那里描述),但Post,put,delete,get都很好,在大多数情况下,映射到CRUD操作。而且没有必要寻找更难的方法。
-
@ Thor84no是的,没关系,但是当电子邮件进入URI时,即使使用HTTPS,也可以嗅探它们
-
@Regfor不,这不是HTTPS的工作方式。 HTTPS加密(使用SSL / TLS)整个HTTP协议,这包括URI,它是HTTP请求的第一行。有关详细信息,请参阅stackoverflow.com/questions/499591/are-https-urls-encrypted。
-
@ Thor84no你对URI和HTTPS是正确的
-
@Regfor所以,假设我没有通过URI发送任何数据,而这一切都在Body中。如果我创建一个独特的新用户,我应该使用PUT而不是POST?
-
Uri中没有电子邮件与主要问题无关。所以再一次:post-create,当你没有实体id时,put-update,当你有实体和id时,它可以创建嵌套实体。
关键指南是操作是否是幂等的,即如果重复操作会发生什么。 如果整体发生相同的事情(忽略日志,上次更改时间和其他fripperies),无论您执行一次,两次还是20次请求,它都是幂等的,应该是PUT。 如果您执行此操作的次数很重要,请使用POST。
创建通常是非幂等的,因为您通常会向用户发出一个ID,但不一定是这样(例如,如果调用者指定了ID)。 更新通常是幂等的,因为在实践中将数据字段更改为其当前值通常是有效的无操作。
-
"关键指南是操作是否是幂等的" - 我在POST时创建一个新用户但是将规则放入以阻止重复的电子邮件和用户名然后它变得幂等,因为规则不是吗?
-
如果您有规则可以阻止重复的电子邮件等违反这些规则的行为应该改变结果。在第一次创建时,您应该创建一个新实体,并在结果上获得200 OK响应,在后续的实体上,您希望没有实体创建(不同的结果)和400 BAD REQUEST(带有错误消息),因此它仍然不是幂等。
-
Thor84no - 好的,我理解创建用户场景。那么只更新现有用户的电子邮件地址?如果我继续使用更新的电子邮件发出相同的请求,则不会发送任何更新的电子邮件,因此它的幂等因此是PUT。