Красноречивые запросы без базы данных (данные извлекаются из внешнего API) - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть Laravel веб-приложение (website.nl) И Laravel API (api.website.nl).

Когда пользователь входит в систему с помощью формы входа на веб-сайте. Почтовый запрос сделан к API. Когда запрос на вход в систему выполнен успешно, объект токена AND User отправляется обратно в виде строки JSON. Метод входа выглядит следующим образом.

public function login(Request $request)
{
    $email = $request->input('email');
    $password = $request->input('password');

    $response = $this->client->request('POST', self::$apiRootUrl . '/login', [
        'headers'     => [
            'Accept' => 'application/json',
        ],
        'form_params' => [
            'email'    => $email,
            'password' => $password
        ],
    ]);

    $result = json_decode($response->getBody()->getContents());

    if (isset($result->success->token))
    {
        $user = User::create([
            'id'    => $result->success->user->id,
            'name'  => $result->success->user->name,
            'email' => $result->success->user->email,
            'password' => $password
        ]);
        Auth::login($user);
        $this->apiToken = $result->success->token;

        return $this->sendLoginResponse($request);
    }

    return $this->sendFailedLoginResponse($request);
}

Где я хочу, чтобы эта функция входа была настолько глупой, насколько это возможно, то есть позвольте API выяснить, является ли это действительным запросом на вход. Этот метод только передает аргументы.

Основной сайт не должен иметь базы данных. Он использует API только для входа в систему, получения токена и выполнения запросов с этим токеном для сбора данных, которые пользователь может увидеть на главной панели веб-сайта.

По этой причине мой вопрос таков: как я могу сохранить объект User, полученный из API, таким образом, чтобы он мог выполнять запросы, как модель Eloquent. Но без необходимости хранить его в базе данных. Опять же, основной сайт не должен нуждаться в базе данных. Он только связывается с API для своих данных.

Я надеюсь, что этот вопрос имеет смысл, если нет, пожалуйста, попросите более подробную информацию.

Я не хочу создавать дубликат база данных с миграциями на основной сайт. Потому что это работа субдомена .api. Кроме того, все модели используются в течение сеанса. Никогда не сохраняется в течение более длительного времени, поскольку он также находится в методе store на поддомене .api.

1 Ответ

0 голосов
/ 19 февраля 2020

Для этого потребуется написать собственную грамматику для Eloquent, реализации ActiveRecord для используемого вами API. Теоретически это возможно, на практике много работы.

Посмотрите здесь, как Laravel реализует типы баз данных, которые он поддерживает в настоящее время. https://laravel.com/api/5.8/Illuminate/Database/Schema/Grammars.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...