Как сохранить Laravel rest Api входит в БД - PullRequest
0 голосов
/ 08 октября 2018

Я хочу сохранить все журналы API в БД.Например, всякий раз, когда API получает удар, его запрос и ответ сохраняются в таблице.

Есть ли в Lavavel настройки для включения журналов Rest apis в db.

Например, в codeigniter: Requestпараметры записываются как: a: 12: {s: 13: "session_token"; s: 20: "OiCtWkqBLm6ScaSHOmQR"; s: 12: "Content-Type"; s: 16: "application / json"; s: 13: "кэш-контроль "; s: 8:" нет-кэша "; s: 13:" Почтальон-маркер "; s: 36:" 0d13fe2e-9986-4ef2-ba46-8207dd28cd44 "; s: 10:" User-Agent»; s: 20: "PostmanRuntime / 7.1.1"; s: 6: "Принять"; s: 3: " / "; s: 4: "Хост"; s: 9: "локальный"; s: 6: "cookie"; s: 81: "PHPSESSID = ho1oa4gjll59u4vq9usct3lev7; ci_session = ruttt4i5144hob6feq3mrv080nh2n74o"; s: 15: "принять-кодирование"; s: 13: "gzip, deflate"; slength "; s: 2:" 19 "; s: 10:" Соединение "; s: 10:" keep-alive "; s: 7:" user_id "; i: 13;}

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Посмотрите пакет журнала активности от Spatie.

GitHub: Журнал активности | Документация

С этим пакетом вы получаете возможность вручную регистрировать событие внутри функции с помощью

activity()->log('Foo bar baz');

. Если вы хотите регистрировать всю активность модели, которую выможет использовать черту журнала активности, также предоставляемую пакетом.

class NewsItem extends Model
{
  use LogsActivity; // Trait goes here
  protected $fillable = ['name', 'text'];
  protected static $logAttributes = ['name', 'text'];
}

Если вы хотите с легкостью регистрировать все свои действия, вы можете создать базовый класс API, откуда будут расширены все остальные классы.Этот базовый класс затем включает черту.

class BaseAPI extends Model
{
  use LogsActivity; // Trait goes here
}

Тогда расширенный класс будет выглядеть так:

class ExampleAPI extends BaseAPI
{
  function foo() 
  {
    echo "Hello World"; 
  }

}

Обратите внимание, что Черта влияет только на операции CRUD по умолчанию ( См. Здесь ).Для того, чтобы все остальное регистрировалось, вам нужно вызвать метод, упомянутый вверху.

Надеюсь, это полезно!

0 голосов
/ 08 октября 2018

Если вы хотите что-то построить самостоятельно, в Laravel отличное решение для промежуточного программного обеспечения.Этот тип промежуточного программного обеспечения выполняется после выполнения всей тяжелой работы (обработка запросов и ответов и т. Д.).

Добавление новой модели для хранения ваших LogEntries. Создание миграций и т. Д. Это основа LaravelЯ не буду объяснять ...: -)

Затем, чтобы начать с промежуточного программного обеспечения, создайте класс промежуточного программного обеспечения следующим образом:

$ php artisan make:middleware RequestLoggerMiddleware

Добавьте тело в новый класс:

class RequestLoggerMiddleware
{

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

    public function terminate(Request $request, Response $response)
    {
        $logEntry = new LogEntry();

        $logEntry->attribute = VALUE;
        $logEntry->attribute = VALUE;
        $logEntry->attribute = VALUE;
        $logEntry->attribute = VALUE;

        $logEntry->save();
    }
}

Добавьте промежуточное ПО в свой Kernel.php:

protected $middleware = [
    ...
    RequestLoggerMiddleware::class,
    ...
];

В Промежуточном программном обеспечении вы можете добавить тонны вещей к вашим атрибутам.Введенные ответ и запрос содержат много информации:

  • время начала запроса >> дата ('Гм H: i: s', LARAVEL_START)

  • URL >> request-> fullUrl ()

  • запрос HTTP-метода >> $ request-> method ()

  • тело запроса >> json_decode ($ request-> getContent (), true);

  • заголовок запроса >> $ request-> header ();

  • ip >> $ request-> ip ()

  • код состояния >> $ response-> getStatusCode ()

  • тело запроса>> json_decode ($ response-> getContent (), true);

Кстати, это ПРИМЕР структуры кода, которую вы можете использовать, чтобы дать вам базовое представление о решении.Очевидно, вам нужно добавить правильные атрибуты в модель, миграцию и т. Д. Но я уверен, что вы можете обработать эту часть ...

И: внедрить Модель в конструктор вместо приведенного выше примера ...: -)

0 голосов
/ 08 октября 2018

В laravel нет выбора для этого.Поэтому вам нужно написать собственный код для этой проверки на https://sergeyzhuk.me/2016/07/30/laravel-logging-to-db/

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