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改变输入1和输入2。POST也同样工作,因为我注意到了资源ID。

问题是,到底DIFF是多少?资源告诉我们:

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

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

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

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

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

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

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

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

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

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

'/comments'

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

如果不是这样,我们会成功的:

'/comments/add','/注释/删除','/comments/update',"/注释/创建">

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

stackoverflow 上类似帖子的链接

最新更新