Тестовое задание для фреймворка Yii2

Тестовое задание для фреймворка Yii2

Пример тестового задания для фреймворк Yii2 с шаблоном Advanced, которое нужно выполнить за 2 дня или раньше

Тестовое задание 1
При разработке использовать фреймворк Yii2 с шаблоном Advanced.
Готовый код разместить на GitHub
В коде максимально использовать встроенные классы Yii2 (хелперы, контроллеры, модели, экшены и т.д.)
Приветствуется качественное оформление кода: комментарии, соблюдение PSR, разделение на классы и т.д.

1. Создать таблицу и модель данных
Использовать драйвер SQLite (база данных в файле). Расположение и имя файла выбрать самостоятельно.
Использовать стандарный файл миграций Yii2. Предусмотреть в дальнейшем возможность перевода базы на другие типы (MySQL, MSSql и т.д.)
На продуктовой среде запретить откат данной миграции.
Структура БД ниже:
create table url_status
(
    hash_string varchar(32) not null,
    created_at datetime not null,
    updated_at datetime not null,
    url varchar(255) not null,
    status_code int null,
    query_count int null,
    constraint url_status_hash_string_uindex
        unique (hash_string)
);

alter table url_status
    add primary key (hash_string);
hash_string - md5-хеш от url
created_at - дата и время добавления записи
updated_at - дата и время обновления записи
url - адрес тестируемой страницы, например https://example.com/page/test
status_code - HTTP-код ответа страницы
query_count - количество запросов для данного адреса

2. Разработать REST-сервис
Эндпоинт сервиса /CheckStatus. Количество элементов в блоке url[] не ограничено.
Пример запроса: ```http request POST /CheckStatus Content-Type: application/json
{ “url”: [ “https://somesite_1.com”, “https://somesite_2.com”, “https://somesite_3.com”, “https://somesite_4.com” ] } ```
Для каждого url из входного запроса:
При наличии данных по данному URL в таблице (проверить по хешу):
если с момента последнего обновления прошло более 10 минут:
обновить status_code, (ожидание ответа - 5 секунд, при таймауте записывать код 0)
увеличить счетчик просмотров query_count
обновить время updated_at
если меньше 10 минут
получить status_code из таблицы
увеличить счетчик просмотров query_count
При отсутвии такого URL в таблице:
добавить новую запись:
hash_string вычислить как md5(url)
created_at, updated_at - текущее время
status_code - HTTP-код ответа страницы (ожидание ответа - 5 секунд, при таймауте записывать код 0)
url - обрабатываемый URL
query_count = 1
Сформировать ответ, в котором каджому URL сопоставлен полученный HTTP-код.
Пример ответа: json   {     "codes": [       {         "url": "https://somesite_1.com",         "code": 200       },       {         "url": "https://somesite_2.com",         "code": 404       },       {         "url": "https://somesite_3.com",         "code": 503       },       {         "url": "https://somesite_4.com",         "code": 200       }     ]   }

3. Разработать консольную команду
Вызов команды yii check-status/statistics должен выводить в STDOUT информацию по всем запросам за последние 24 часа (по полю updated_at), у которых статус ответа не равен 200. В выводе должны присутствовать поля url и status_code. Формат произвольный.

4. Дополнительные требования
Выполнение дополнительных требований не обязательно, но желательно. Если какое-то из них не получается выполнить, просьба объяснить причину. Например: большие трудозатраты, никогда не сталкивался с такой задачей и т.д.
Если требования не выполняются по причине больших трудозатрат, просьба как минимум обозначить ход решения задачи и оценку времени на выполнение.

4.1 Оформить код в виде composer-библиотеки
Весь код приложения должен быть в отдельном модуле и подключаться к Yii2-приложению командой composer require _module-name_
После подключения не должно производиться дополнительных манипуляций с кодом для работы с сервисом
Загружать модуль на packagist.com не обязательно

4.2 Вынести параметры модуля в конфигурацию
Самостоятельно определить настройки, которые можно вынести в конфигурацию
Вынести эти настройки в конфигурацию модуля/приложения

4.3 Оптимизировать скорость опроса хостов
Необходимо реализовать параллельный опрос статусов хостов в п.2 (REST сервис)

4.4 Реализовать SOAP-сервис с аналогичным функционалом
Добавить эндпоинт, на котором будет работать SOAP-сервис. Функционал повторяет п.3
Сервис должен рабоать по WSDL-схеме, которую необходимо разработать самостоятельно
По запросу GET /soap-endpoint?wsdl должна возвращаться WSDL-схема
По запросу POST /soap-endpoint должен работать сам сервис

Ещё статьи:

25.02.2024 Какие показатели обеспечивает антибот для защиты сайта от накруток?
Какие показатели обеспечивает антибот для защиты сайта от SEO накруток и есть ли в этом какая-то эффективность?
Часто у заказчиков возникают такие вопросы, и первым делом нужно определить критерии по которым оценивать эффективность. ID: 467

08.11.2023 Прощай bitrix.xscan, не стало битрикс скан модуля
Сегодня увидел, что полезного модуля bitrix.xscan не стало на маркетплейсе. ID: 464

26.07.2023 Сохренение ютм меток в сессию
Вариант сохренения ютм меток в сессию в афйле init.php ID: 462

Комментарии
Ответ на комментарий от «»(x)
Голос
/
© 2015-2024 Web админ
Связаться по WhatsApp