我是否仅使用post and get弄乱了我的宁静路线?

时间:2018-11-27 23:55:57

标签: php laravel rest

在阅读了一些有关Restful的文章之后,我不太确定我是否为路由使用了正确的路径和HTTP动词。例如:

这是我显示图像的路线:

Route::get('/image/{id}', 'PagesController@specificImage')->name('specificImage');

这是删除图片的途径:

Route::get('/deleteImage/{id}', 'ArtworkController@deleteImage')->name('deleteImage');

将图像删除路径更改为:

Route::delete('/image/{id}', 'ArtworkController@deleteImage')->name('deleteImage');

我已将GET更改为DELETE,并将路径从/deleteImage/{id}更改为/image/{id}。我想这更有意义,但我想知道GET /deleteImage/{id}和DELETE /deleteImage/{id}之间是否会有冲突。

可以安全地假设更新图像的路线(将在以后添加)应该看起来像这样:

Route::patch('/image/{id}', 'ArtworkController@updateImage')->name('updateImage');

我认为另一条可能不正确的路线是我的路线,该路线用于更改个人资料。

此路线向您显示用户的个人资料:

Route::get('/profile/{username}', 'PagesController@profile')->name('profile');

,此路线用于更改配置文件:

Route::patch('/profile/{user}/update', 'UsersController@updateProfile')->name('updateProfile');

由于此路由使用的是PATCH,我可以删除路径的/update部分,即使它与显示配置文件的GET路径相同,也可以使它继续工作吗?

从本质上来说,能够使用相同的路径进行获取,创建,更新和删除以及仅更改HTTP动词,都使它具有更好的可读性。我知道我只能使用GET和POST,并且一切正常,但是我需要知道这是错误的。

2 个答案:

答案 0 :(得分:1)

如果遵循Laravel处理CRUD路由的标准方法,则所做的更改部分正确。实际上,您可以使Laravel使用Route::resource为您自动生成标准化路线,但是您需要具有在同一控制器中使用模型的所有方法(例如,ImageController用于图像)。

Route::resource('images', 'ImageController');

您可以在命令提示符或终端中执行命令“ php artisan route:list”,以查看Route :: resource生成了哪些路由。有关更多信息,请参见this article

现在,关于您的原始问题,标准将是:

Route::get('images/{id}', 'ImageController@show') // to view the image
Route::get('images/create', 'ImageController@create') // to view the create new image page
Route::post('images', 'ImageController@store') // to store a new image
Route::get('images/{id}/edit', 'ImageController@edit') // to view the edit page
Route::patch('images/{id}', 'ImageController@update') // to save changes
Route::delete('images/{id}', 'ImageController@delete') // to delete

使用具有相同URL的不同方法的路由之间不会存在冲突。只要方法不同,您就可以有多个指向images/{id}的路由。

答案 1 :(得分:0)

在REST中,URL应该始终仅包含资源的路径。
不允许使用动词,只能使用名词。
使用方法(POSTGETDELETE等在资源上执行操作。

在您的情况下,资源为image,因此端点看起来像:/images/{id}
delete图片(资源):DELETE /images/{id}
替换图像(资源):PUT /images/{id}

同一情况适用于帐户,在这种情况下,资源为/profile/{username}
要更新部分个人资料(例如age),请使用PATCH /profile/{username}

请注意:
PUT用于插入/替换资源
PATCH用于修改现有资源上的某些属性。