Я создал API, который возвращает json в Laravel. (маршруты/api.php)Вы можете иметь свой API и есть (потреблять) его в Laravel?
Теперь я хочу, чтобы потреблять указанный API в моей web
-side проекта (маршруты/web.php (в том числе промежуточного программного обеспечения), лезвие видом и т.д.).
Текущее решение, что у меня есть что-то вроде этого:
public function register(Request $request) {
// password1 == password2 etc (form logic/validation)
$internal_request = Request::create($this->base_api_url . 'register', 'POST');
$internal_request->replace($request->input());
$response = Route::dispatch($internal_request);
}
Какие «вперед» просьба к апи коллеге моему апи, если форма является действительным. Но у меня такое чувство, что это не самая лучшая практика или умная. Другие маршруты, кроме login
и register
, используют токен api, хранящийся в сеансе для совершения вызовов. они добавляют токен «x-token» в качестве заголовка к $internal_request
. Лучше ли это делать в промежуточном программном обеспечении? Есть ли какой-нибудь пример лучшей реализации где-нибудь?
Мой API имеет метод так:
POST api/register
Что проверить, существуют ли необходимые поля и имеют rigt формат (валидация)
и мой веб-маршрут имеет /register
Это будет сначала проверьте, совпадают ли пароли с входами проверки пароля (pass1 == pass2) и затем передают их эквиваленту api.
So web
должно быть superset (валидация) api
.
Фокус на единой ответственности, то вынесем общую работу. Web, CLI и API отвечают за отмену и проверку ввода. После удовлетворения ввода, они затем передают проверенный вход в общую службу, которая выполняет требуемую задачу. Наконец, они берут результат этой общей службы и направляют ее обратно пользователю. Loopback звонит, как эта работа, но они избыточны, потому что marshalling/unmarshalling происходит дважды. Это также делает тестирование более сложным, чем необходимо, поскольку вы в конечном итоге полагаетесь на интеграционное тестирование и часто тестируете одни и те же пути снова и снова. – bishop
@bishop Да, я думал о том, чтобы делать больше внутри модели и меньше в контроллерах. Таким образом, модель = единая ответственность. Но есть ли какой-то жесткий способ? –
Нет, нет жесткого пути из-за TIMTOWTDI. Я согласен с тем, что продвижение большинства работ на уровень сервиса модели - это путь. Но я подчеркиваю часть * service *: множество классов типа модели, работающих с различными частями общей проблемы преобразования данных, а не с несколькими гигантскими моделями, которые делают слишком много. – bishop