【发布时间】:2019-07-11 09:18:14
【问题描述】:
我目前正在 Laravel 中开发一个应用程序。在尝试遵守 REST API 指南时,我遇到了一个我不确定如何以 RESTfully 方式处理的场景。
我有一个可以处理多个操作的 Lease 资源:
Route::get('/lease/create', 'API\LeaseController@create');
Route::get('/lease/{leaseId}', 'API\LeaseController@show');
Route::post('/lease', 'API\LeaseController@store');
Route::patch('/lease/{leaseId}', 'API\LeaseController@update');
Route::delete('/lease/{leaseId}', 'API\LeaseController@destroy');
到目前为止,这些是 URI 和控制器操作之间的 1:1。现在,我需要在租约上执行其他操作,这就是我不确定处理此问题的最佳方法的地方。
1) 可以续订租约(使用新的开始和结束日期克隆现有租约)。
2) 可以结束租约(状态更改为非活动,结束日期已更新)。
当我考虑以 REST 方式执行此操作时,我将这两个附加操作视为对现有端点的发布和补丁(两者都将映射到控制器上的 store 和 update 方法,并且可以使用现有的 URI。
我是否应该继续这样考虑并将它们都映射到现有端点?我担心的是我将如何处理不同的反应?例如,如果在续订操作完成后,我想传递一条消息说“此租约已成功续订。”,我如何区分续订操作和常规商店操作,因为它们都达到了相同的终点?
或者我应该创建两个新的 URI,比如:
Route::patch('/lease/{leaseId}/end', 'API\LeaseController@updateLeaseEnd');
Route::post('/lease/{leaseId}/renew', 'API\LeaseController@storeLeaseRenew');
还有两个独立函数中的控制逻辑,尽管它们实际上只是额外的存储和更新,这有点多余?
【问题讨论】:
-
我会选择具有不同处理程序的其他路线。因为您将为每个场景提供一个完全可测试的应用程序。
标签: laravel rest vuex api-design