使用Laravel与数据库应用程序进行PUT和DELETE

时间:2016-03-06 20:15:24

标签: laravel post crud put

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

1 个答案:

答案 0 :(得分:3)

没有特定的权力使用一个在另一个上面,这里的好处主要是语义上的。

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

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

  

根据定义,PUTDELETE方法是幂等的(意味着每次运行时使用该方法的特定请求的结果都是相同的),而POST请求另一方面则不是。

考虑一下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将返回ID为1
  • 的资源
  • PUT将修改/更新ID为1
  • 的资源
  • DELETE将销毁ID为1
  • 的资源

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

这不是您需要编码的标准,它只是很多人都同意的事情。由于Laravel在某些方面是一个自以为是的框架,它提供了开箱即用的资源处理方式。

当然没有什么可以阻止你对所有路由使用POST,因为它可以正常工作(你需要为每个动作使用不同的URL路径,但最终结果是会是一样的。)