Тестовое задание для фреймворка Yii2
Просмотров: 617
Пример тестового задания для фреймворк 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 должен работать сам сервис
Ещё статьи:
27.11.2024
Ошибка при 1с обмене 502 Bad Gateway
Произошла ошибка на стороне сервера. Получен неизвестный статус импорта.
Обмен не выполнен. Ответ сервера: 502 Bad Gateway
ID: 540
20.11.2024
Задача для РНР, разработать Футбольный календарь
На первый взгляд задача кажется не сложной, но это не так. Нужно учитывать, что она займёт время, многие не успевают сделать в сроки.
ID: 538
20.11.2024
Нюансы обмена доставок один случай
Описание проблемы.
В сторону 1С синхронизацию доставок она налажена, информация записывается (проставляется тип доставки, зона доставки)
ID: 537