Могу ли я попросить помощи в решении тестового задания для получения работы?
Подался на вакансию WordPress Developer, прислали такое тестовое, как я понимаю вакансии для junior WP Dev. Сроки естестенно прошли, а я задание так и не решил. Сейчас хочу для себя разобраться с данным заданием и с процессом реализации подобных задач. Буду очень признателен за детали и подробности. Предполагаю, что рассмотрение подобной задачи будет интересным и наглядным пособием применения полученных знаний из курса на практике. Спасибо! (в скобочках я оставлял свои комментарии)
***********************************************************************************************
Тестовое задание на должность разработчика WordPress
Поднять сайт на основании WordPress + WooCommerce. (эта задача решена, хоть что-то я знаю)
1. Синхронизация базы товаров с остатками
Синхронизацию базы товаров с остатками необходимо сделать своим независимым плагином, “wpsync-webspark”, который будет обращаться по API посредством GET-запроса:
https://my.api.mockaroo.com/products.json?key=89b23a40
Try with cURL:
curl -H "X-API-Key: 89b23a40" https://my.api.mockaroo.com/products.json
Данный API возвращает JSON-массив товаров, содержащий следующие поля:
sku;
name;
description;
price;
picture;
in_stock.
Обновление товарной базы должно происходить каждый час.
Максимальное кол-во товаров в базе: 10,000.
В случае, если в базе нет определенного sku товара, такой товар нужно создать.
В случае, если sku товара уже существует, необходимо обновить все поля, в которых информация была изменена.
В случае, если какой-либо из товаров не приходит, он недоступен для заказа и должен быть удален с сайта. Однако стоит предусмотреть ситуацию когда API не возвращает результат, чтобы по причине отсутствия соединения не занулить все товары в базе.
2. Отправка информации о заказе
(необязательный)
Во время оформления заказа необходимо отправить через API информацию о том, какие SKU и в каком количестве заказаны. Для этого необходимо вызвать API посредством POST-запроса:
https://my.api.mockaroo.com/order.json?key=89b23a40&__method=POST
Try with cURL:
curl -H "X-API-Key: 89b23a40" -X POST https://my.api.mockaroo.com/order.json
и передавать JSON-массив SKU и количества заказанных товаров в виде:
[
{
"sku": "566fe0cb-9261-41f8-95d2-479cb41497ac",
"items": 1
},
{
"sku": "83878239-bd0f-419c-9ed0-cbbffb288cb6",
"items": 3
}
]
В случае ответа сервера {"s":"accepted"} - заказ считаем успешно оформленным.
В случае ответа сервера {"s":"declined"} - невозможно выполнить заказ по разным причинам. Например, какого-то товара может не быть в наличии.
Если заказ невозможно оформить, физически заказ на стороне WP не должен быть создан, товары в корзине не остаются.
3. Требования к плагину
Плагин должен иметь название “wpsync-webspark”.
Файлы плагина необходимо залить в любой GIT-репозиторий и прислать ссылку, доступную для просмотра.
В плагине должен быть файл readme.md, в котором пошагово расписан порядок разворачивания и запуска плагина, чтобы тех. специалист мог проверить ТЗ.
4. Внимание!
Обязательно! Если что-либо не понятно в постановке задачи, не стесняйтесь спросить, так как правильно понятая задача - залог успеха. Обратное - тоже верно.
На задание отводится 24 часа (одни сутки) с момента выдачи.
4 ответов
Что из задания именно непонятно?
1. С какой из подзадач начать реализацию?
Для начала нужно разобраться как создаются плагины в wordpress:
https://developer.wordpress.org/plugins/
2. Как реализовать парсинг базы каждый час?
Нужно почитать что такое cron и как они работают:
https://ru.wikipedia.org/wiki/Cron
И желательно с основами linux:
https://fructcode.com/ru/courses/linux-and-git/
А также посмотреть как в Wordpress работать с CRON:
https://developer.wordpress.org/plugins/cron/understanding-wp-cron-scheduling/
3. Как сравнивать все SKU в базе, с SKU из сервера? SKU приходит в виде строки сосоящей из цифр, букв и символов (подобно полю с паролями в БД). Предполагаю, что это, как-то связано с движком WP, так как SKU это его стандартная сущность (но это не точно).
Для начала нужно почитать что такое CURL и как с ним работать в PHP (на самом деле, это очень просто), тут много примеров с CURL в Wordpress работать, в том числе с доп. параметрами (как в задании ключ к API указывать):
https://developer.wordpress.org/reference/functions/wp_remote_get/
function wp_remote_get( $url, $args = array() ) {
$http = _wp_http_get_object();
return $http->get( $url, $args );
}
аргументы, пример (чтобы в API ключ через headers передать):
$args = array(
'headers' => array(
'Content-Type' => 'application/json',
'X-Api-Key' => 'apikey12345'
)
Если пока нет понимания, что такое GET, POST, PUT, headers и т.д. стоит почитать теорию HTTP:
https://ru.wikipedia.org/wiki/HTTP
и посмотреть про GET, POST:
https://fructcode.com/ru/courses/php-and-mysql/video-form-get-and-post/
Библиотеки для Curl есть почти для всех языков программирования, для начала стоит почитать, что эта за такая программа:
https://ru.wikipedia.org/wiki/CURL
Когда через curl будет приходить ответ от API, он будет в json, этот json можно перевести в объект php:
https://www.php.net/manual/en/function.json-decode.php
3. Как сравнивать все SKU в базе, с SKU из сервера? SKU приходит в виде строки сосоящей из цифр, букв и символов (подобно полю с паролями в БД). Предполагаю, что это, как-то связано с движком WP, так как SKU это его стандартная сущность (но это не точно).
В задании сказано, что:
Данный API возвращает JSON-массив товаров, содержащий следующие поля:
sku;
name;
description;
price;
picture;
in_stock.
Соответственно, есть в базе данных поле sku и в данных, которые пришли от API. Когда делается запрос через CURL каждый час через CRON берутся данные из API (то что лежит в sku) и делается SELECT * FROM названиетаблицы WHERE sku = SKU_ИЗ_API, если база данных возвращает не пустой результат, значит этот товар уже есть в базе дальше сравниваются остальные поля товара, что-то типа:
if ($result->name !== $api_result->name || $result->description!== $api_result->description || перечисление остальных полей) {
// Здесь пишется код обновления mysql таблицы
// UPDATE название_таблицы
// SET name= $api_result->name, description=$api_result->description, ........
// WHERE sku=$api_result->sku
}
Если еще нет в базе sku которое пришло через API, делается insert в базу с данными которые пришли через API. Примерно так. Ну и поставить проверки, что когда после выполнения CURL приходит пустой результат, не делать insert или update в базу данных.
1. С какой из подзадач начать реализацию?
2. Как реализовать парсинг базы каждый час?
3. Как сравнивать все SKU в базе, с SKU из сервера? SKU приходит в виде строки сосоящей из цифр, букв и символов (подобно полю с паролями в БД). Предполагаю, что это, как-то связано с движком WP, так как SKU это его стандартная сущность (но это не точно).
4. Как зациклить проверку базы по SKU на 10000 едениц, при этом выполняя проверку на его наличие в спарсеной БД?
Уже пересматриваю весь курс PHP/MySQP с первого урока. Но, третий глаз не открывается, я не понимаю с чего начинать реализацию задачи! Может быть, понимание придет ближе к последнему видео, но это не точно.
Спасибо! Буду разбираться!