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

问题描述

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

我有一个表格:

  <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。 和 PATCH 改变 input1 和 input2。 POST 也一样,因为我记下了资源 ID。

问题是什么是确切的 DIFF? 资源告诉我们:

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

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

听说PUT方法会完全重新生成资源,但没有发生,它只更新DB中发送的字段(上面例子中只更新了Input1和input2)
我认为当我们不使用包含所有输入的表单以及部分发送数据时,它们会起作用。 在实施方面是否还有其他深刻而明显的差异?

解决方法

希望这对某些方面有所帮助。

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

我们可以有一个路由路径,如:

'/comments'

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

如果不是,我们会做到的:

'/评论/添加','/评论/删除','/评论/更新','/评论/创建'

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

Link to similar post on stackoverflow

,

我认为您对 HTTP 请求方法的理解有误。当然,它们都有差异,但不是指向您。

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

以上几行说明您必须使用特殊的 HTTP 方法来进行特殊类型的操作。这是否意味着我不能使用 GET 来删除资源?不,它没有。从技术上讲,您可以只使用一种具有不同 URL 的 HTTP 方法来执行所有资源操作。当然,这是不好的做法,但这是可能的。 HTTP 方法仅显示如何将数据从客户端send 传输到服务器,而不是如何processing on server

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