#laravel #api #rest
Вопрос:
У меня есть следующие конечные точки API:
Route::post('/jobs', [JobController::class, 'store']);
Route::patch('/jobs/{id}', [JobController::class, 'update']);
Route::delete('/jobs/{id}', [JobController::class, 'destroy']);
Следует ли добавить следующие конечные точки избыточности? Избыточны в том смысле, что они указывают на одни и те же функции контроллера.
Route::post('/projects/{projectId}/jobs', [JobController::class, 'store']);
Route::patch('/projects/{projectId}/jobs/{id}', [JobController::class, 'update']);
Route::delete('/projects/{projectId}/jobs/{id}', [JobController::class, 'destroy']);
Я лично нахожу более удобным указание ресурсов в качестве ресурсов верхнего уровня, а не вложенных ресурсов, поскольку нет необходимости передавать (бесполезные) родительские локаторы.
Есть ли какая-то польза в определении этих дополнительных маршрутов только ради того, чтобы иметь спокойный API?
Ответ №1:
Мой здравый смысл говорит, что если я увижу слизень /projects
в начале URL-адреса, действие будет связано с этой моделью, в данном случае Project::class
.
С другой стороны, если ваш Job::class
связан с вашим Project::class
через внешний ключ, у вас есть все, что вам нужно, чтобы добраться до проекта Задания, в этом случае я не вижу смысла отправлять {projectId}
по URL.
На самом деле, что может произойти, если вы отправите {projectId}
сообщение, которое не имеет отношения к {id}
. Вам нужно будет проверить оба значения и приложить дополнительные усилия, написав проверки.