muhammad_97
@muhammad_97
PHP-разработчик

Архитектура API на Laravel?

Здравствуйте. Делаю небольшое API для AJAX-запросов. Сам роут для API выглядит вот так:

Route::group(array('prefix' => 'api'), function()
{
	Route::any('/v{version}/{group}.{method}.{type?}', 'ApiController@callMethod');
});


Я создал новый неймспейс и прописал в контроллере:

public function callMethod($version, $controller, $method, $responseType =  'json')
{
	$api = new Api\Api();

	return $api->callMethod($controller, $method, $responseType);
}


Все ок пока я не захочу создать новую версию API, сохранив старую. Думал сделать так:

public function callMethod($version, $controller, $method, $responseType =  'json')
{
	$directory = 'v' . $version;
	$className = "Api\\$directory\\Api()";

	$api = new $className();

	return $api->callMethod($controller, $method, $responseType);;
}


и создавать для каждой версии отдельную папку. Но в таком случае придется менять неймспейсы во всех классах, что, как мне кажется, не совсем правильно. Может быть есть другой вариант?
  • Вопрос задан
  • 4746 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Может быть есть другой вариант?

Да, есть, перестать страдать фигней с универсальными настройками раутинга (всеравно придется потом что-то докручивать) и сделать нормальную REST/JSON RPC API, со своими правилами на каждый метод API.

laravel.com/docs/5.0/controllers#restful-resource-... - вообще имеет смысл вот такие штуки использовать.

По версиям API - можно через мидлвэры разруливать.

Что до {type} - вообще это не круто, если вы хотите получить json вместо xml, то просто пишите в Accept именно application/json, а не делайте кастыли в URI. Хотя это как вам удобнее конечно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы