在阅读了一些有关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,并且一切正常,但是我需要知道这是错误的。
答案 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应该始终仅包含资源的路径。
不允许使用动词,只能使用名词。
使用方法(POST
,GET
,DELETE
等在资源上执行操作。
在您的情况下,资源为image
,因此端点看起来像:/images/{id}
。
要delete
图片(资源):DELETE
/images/{id}
。
替换图像(资源):PUT
/images/{id}
同一情况适用于帐户,在这种情况下,资源为/profile/{username}
。
要更新部分个人资料(例如age),请使用PATCH
/profile/{username}
。
请注意:
PUT
用于插入/替换资源
PATCH
用于修改现有资源上的某些属性。