当前位置: 首页 > 知识库问答 >
问题:

Laravel的PUT、PATCH和POST实现究竟是如何的?

汝彭薄
2023-03-14

据我所知,我已经阅读了很多关于HTTP方法差异和确切优势的资源,这似乎是一份更好地理解和使用RESTAPI的合同。我的困惑如下:

我有一个表格:

  <form action="{{ route('test') }}" method="POST">
        @csrf
        @method('PUT')
        <input type="text" name="input1" >
        <input type="text" name="input2" >
        <button type="submit">send </button>
    </form>

我有一张这样的桌子:

| id | input1 | input2 | input3

| -- | -----  | ------ |----|

| 1  |   100  |  220   |  400    

在控制器中,我更新了我们发送的所有请求字段。

  public function test(Request  $request)
    {
      return  Setting::find(1)->fill( $request->all())->save();
    }

所有的PUT、PATCH和POST方法都以相同的方式工作<如果PUT应该完全重新生成资源,则它不会将input3更改为NULL。补丁更改了input1和input2。POST的工作原理也是一样的,因为我注意到了资源ID。

问题是,到底有什么区别?参考资料告诉我们:

create - POST
read - GET
update - PUT
modify - PATCH
delete - DELETE

而我们可以使用POST更新、修改甚至删除。当我们使用表单请求时,发送的数据完全相同。

我们听说PUT方法完全重新生成资源,但它不会发生,它只更新DB中的已发送字段(仅更新了上面示例中的Input1和input2)
我认为当我们不使用包含所有输入的表单并且当我们部分发送数据时,它们会起作用。在实现上还有其他深刻而明显的区别吗?

共有2个答案

唐晗昱
2023-03-14

希望这在某种程度上有所帮助。

当我们使用POST、PUT、PATCH和DELETE时

我们可以有如下路径:

'/comments'

相同的路由将处理所有内容:POST、PUT、PATCH和DELETE

如果没有,我们会成功的:

“/comments/add”、“comments/delete”、“comments/update”、“comments/create”

当我们这样做时,我们可以选择使用一个控制器处理该路由,并使用方法处理每种请求类型,我们甚至可以继续添加中间件,并将某些功能限制到具有特定角色的某些用户。如果不可能,某些方法(函数)将太长。它也是使方法简单和小的最佳实践。

链接到stackoverflow上的类似帖子

危宜
2023-03-14

我认为你对HTTP请求方法的理解是错误的。当然,它们都有区别,但不是指着你的。

create - POST
read - GET
update - PUT
modify - PATCH
delete - DELETE 

上面的行说您必须使用特殊的HTTP方法来进行特殊的操作。这是否意味着我不能使用GET来删除资源?不,没有。从技术上讲,您可以使用一个带有不同URL的HTTP方法来执行所有具有资源的操作。当然,这是不好的做法,但这是可能的。HTTP方法只是展示了如何将数据从客户端发送到服务器,但没有展示如何在服务器上进行处理。

那么,为什么我们必须对不同类型的操作使用不同的方法呢?有一些现有的规则,他们说:使用POST创建,放置更新等等。如果你创建自己的应用程序,你希望它能使用很长时间,其他开发者会维护它,如果你坚持一般规则,维护你的系统会简单得多。此外,不同的方法可以以不同的安全级别发送数据,您必须意识到这一点。

 类似资料:
  • HTTP协议中的PUT、POST和PATCH方法有什么区别?

  • 我在Rails应用程序中使用了一个PUT请求。现在,浏览器已经实现了一个新的HTTP动词,补丁。因此,我想知道PATCH和PUT请求之间的主要区别是什么,以及何时应该使用其中一个。

  • 问题内容: HashMap中的Hash Collision或Hashing Collision并不是一个新话题,我遇到了多个博客和讨论区,解释了如何产生Hash Collision或如何以模棱两可和详细的方式避免它。我最近在一次采访中遇到了这个问题。我有很多事情要解释,但我认为准确地给出正确的解释真的很困难。抱歉,如果我在这里重复我的问题,请给我准确的答案: 哈希冲突到底是什么?它是一项功能或常见

  • 我知道React的虚拟DOM更快有两个理由- > 它只更新那些实际需要更新的元素(使用diff)。 它批量更新,因此我们只更新一次真正的DOM。因此,重新喷漆也只能进行一次,否则会进行多次。 我对这两点都有疑问- > 据我所知,所有现代浏览器的效率都足以只更新DOM中所需的元素。例如,如果我有两个“p”标记,并且我使用按钮单击更改其中一个p标记中的文本,那么safari将只更新该p标记(我已使用油

  • 我一直在弄清楚口译员的确切工作方式,在谷歌上搜索了一下,得出了一些结论,只是希望有人能纠正一下,让我更好地了解口译员的工作。 所以我的理解是: 解释器是一种将代码从高级语言转换为机器格式的软件程序 现在我仍然不清楚中间发生的子过程,即。 解释器产生中间代码 然后优化解释的代码 然后生成目标代码 并最终执行 还有一些问题: 那么解释器是否单独负责生成目标代码?并执行它? 执行是否意味着它在JVM或底

  • 问题内容: 我在jquery图像滑块演示中找到了reset.css文件,但它从未包含在主index.html文件中。应该做什么,更重要的是,您将它放在哪里?你把它之前 任何引用的样式表()? 这是reset.css内部的代码 问题答案: 最初,关于样式的工作方式还没有标准化,每个浏览器都实现了自己认为正确的方式。您在IE中看到太多有关样式错误的问题的原因之一是,因为IE是样式方面与其他浏览器最不相