POST:用于创建和更新资源
PUT:用于更新现有资源
我能用POST代替PUT方法吗?如果我使用POST方法而不是PUT方法,会有什么缺点?
如果POST可以完成PUT方法的工作,为什么还需要PUT方法?
POST:用于创建和更新资源
PUT:用于更新现有资源
我能用POST代替PUT方法吗?如果我使用POST方法而不是PUT方法,会有什么缺点?
如果POST可以完成PUT方法的工作,为什么还需要PUT方法?
POST请求表示:“这里有一些数据,请使用指定URL上的处理程序解析它,然后对其执行某些有用的操作”
PUT请求表示:“这里有一些数据和一个URL。如果有人对该URL发出GET请求,请返回这些数据”。
它们执行的任务是明显不同的。
你可以使用POST请求来实现与PUT请求相同的结果,但是处理PUT请求的语义是预定义和标准的。
主要区别在于POST方法不保证幂等性,而PUT方法必须保证。
也就是说,假设您更新了一条记录以进行增量更新,那么您不能使用POST方法。因为每次用户进行此更新时,记录都将不同,因此用户不能一遍又一遍地尝试并期望相同的结果。而对于PUT方法的更新,用户可以多次尝试该请求,并且无论用户进行多少次更新请求,最终的记录和响应始终都将相同。
大多数人不想给出这种保证,因此他们只使用POST方法,这不是幂等的。但假设您不是在增加任何内容,而只是放置同一个文件,则用户可以期望即使反复调用,也会得到完全相同的fileId和响应,此时您可以使用PUT方法。
对于幂等操作,您也可以使用PUT方法进行插入操作。因此,POST/PUT方法都可用于插入/更新(都提交数据)。开发者可以根据自己的喜好选择如何使用-有些人喜欢将CRUD映射到方法-其他人则根据幂等性选择仅使用POST或PUT方法。
使用 POST 和 PUT 可以帮助 REST API 的消费者了解 API 正在发生的事情。例如,在进行 PUT(即更新)操作时,您可能需要某种令牌,以确保正在更新的实体自上次读取以来没有被更改。当实体已经存在时,POST 可能会以不同的方式失败,而只有在更改或不存在时才会失败。真的听起来像您需要查看一些现有的 REST API,并了解它们的工作方式。
我相信这取决于开发人员使用哪个。
假设您正在创建记录。如果您的ID
字段为空,则表示这是一个创建请求。如果提供了ID
,则它是一个更新请求。
开发人员可以区分它。我了解到幂等请求将确保结果相同,但如果您发送ID = 1
,那么对于POST方法也是如此。
您可以始终更新记录,即使您发送相同的请求1000次。
您还可以阅读此处的文章详细了解这一点。