Каковы плюсы и минусы определения избыточных конечных точек API?

#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} . Вам нужно будет проверить оба значения и приложить дополнительные усилия, написав проверки.