PUT 和 DELETE 数据库应用程序 Laravel

PUT and DELETE with database application with Laravel

我看不出 PUT 和 DELETE http 动词背后的目的。我在 https://scotch.io/tutorials/simple-laravel-crud-with-resource-controllers 看过一个教程,但没有看到 PUT 或 DELETE 方法在涉及基于数据库的应用程序时的强大功能。当我将完全相同的代码粘贴到我的应用程序中的 POST 路由时,为什么还要在我的应用程序中编写 PUT 路由?

使用一个比另一个没有特别的力量,这里的好处主要是语义。

虽然没有强制执行 REST 约定,但这些约定用于提供一种 "standardized" 访问 RESTful 资源的方式(尽管接受的规范可能因不同的人而略有不同)。

RESTful Web 服务使用的 HTTP 方法(动词)由 RFC2616 定义。根据该定义,动词确实具有一些内在的语义价值:

By definition the PUT and DELETE methods are idempotent (meaning that the result of a particular request using that method will be the same each time your run it), while POST requests on the other hand are not.

考虑一些由Laravel的Route::resource()方法生成的路由:

+--------+---------------------+------------------+-------------------------------+
| Method | URI                 | Name             | Action                        |
+--------+---------------------+------------------+-------------------------------+
| POST   | resource            | resource.store   | ResourceController@store      |
| GET    | resource/{resource} | resource.show    | ResourceController@show       |
| PUT    | resource/{resource} | resource.update  | ResourceController@update     |
| DELETE | resource/{resource} | resource.destroy | ResourceController@destroy    |
+--------+---------------------+------------------+-------------------------------+

使用POST方法的路由会创建一个新的资源条目,所以它不需要在路由中指定唯一标识符,但是如果你查看其他三个定义,你可以看到语义值使用特定方法对同一资源发出请求。因此,如果您要向:

提出请求
http://domain.com/resource/1

请求会根据 HTTP 方法执行不同的操作:

  • GET 将 return ID 为 1
  • 的资源
  • PUT 将 modify/update ID 为 1
  • 的资源
  • DELETE 将销毁 ID 为 1
  • 的资源

这意味着无论你的资源是小狗、汽车还是文件,你都知道在同一个 URL 上使用不同的动词会产生预期的效果。

这不是您编码时必须遵守的标准,它只是很多人都同意的标准。由于 Laravel 在某些方面是一个自以为是的框架,它提供了这种开箱即用的处理资源的特殊方式。


当然,没有什么可以阻止您对所有路线使用 POST,因为这会很好用(您需要为每个动作使用不同的 URL 路径,但最终结果会是一样的)。