Тестовое задание

Тестовое задание


Задача

Реализовать простой протокол JSON-API для мобильного приложения.

Чтобы лучше понять Ваши навыки программирования и проектирования, решить задачу предлагается на чистом PHP, без использования фреймворков, но с использованием ООП. Код должен быть аккуратен, без излишних усложнений.

Для ускорения разработки базовая схема БД уже создана. Вы можете создавать дополнительные таблицы, если сочтете это необходимым.

Предполагается, что сервер будет работать под управлением Ubuntu, PHP 7.1, MySQL, Nginx. Дополнительные библиотеки, при необходимости, будут доступны.

У квалифицированного программиста решение поставленной задачи занимает 1-2 часа.

Описание протокола

Запрос

Вызов методов происходит путем отправки POST запроса на URL вида: http://server/api/MethodName

Ответ

Ответ присылается всегда в JSON формате (даже в случае ошибки) и всегда имеет следующий вид: { status: "ok", payload: {}, message: "" }

Описание полей ответа

  • status - Cтатус операции ("ok" | "error" - ошибка или успех)
  • payload - Полезная нагрузка (данные) - массив объектов или сам объект
  • message - Опциональный параметр - сообщение, которое нужно отобразить пользователю. Например, "Спасибо, ваша новость сохранена" или "Вы уже опубликовали такую новость".

Методы

Метод "Table"

Получить данные таблицы. Метод возвращает все имеющиеся данные для указанной таблицы (из числа разрешенных). Важно: количество доступных таблиц в дальнейшем планируется значительно увеличить.

Параметры запроса

  • table - название таблицы (обязательный параметр). На текущий момент разрешены следующие значения:News, Session
  • id - ID объекта (опциональный параметр). Если не передан - возвращаются все объекты таблицы, если передан - возвращается единственная строка с указанным ID.

Пример ответа (таблица News)

{ "status": "ok", "payload": [ { "ID": 1, "ParticipantId": 1, "NewsTitle": "Доступна новая программа", "NewsMessage": "Новая программа выслана на почту всем участникам" "LikesCounter": 0 }, { "ID": 2, "ParticipantId": 3, "NewsTitle": "Еще одна новость", "NewsMessage": "Проверка новости" "LikesCounter": 0 } ] }

Пример ответа (таблица Session)

{ "status": "ok", "payload": [ { "ID": 123, "Name": "Annual report", "TimeOfEvent": "2016-12-15 16:00:00", "Description": "Anuual report by CEO", "Speakers": [ { "ID": 1, "Name": "Speaker name } ] } ] }

Метод SessionSubscribe

Записаться на сессию (лекцию). Каждая сессия имеет ограниченное число мест. Записаться может только пользователь, который есть в таблице Users. Важно: посещаемость сервиса будет высокая, не должно быть возможности превысить число записавшихся.

Параметры запроса

  • sessionId - ID сессии, на которую нужно записаться
  • userEmail - email пользователя

Пример ответа

{ "status": "ok", "message": "Спасибо, вы успешно записаны!" }

Пример ответа (ошибка)

{ "status": "ok", "message": "Извините, все места заняты" }

Заключение

Решение присылайте на yaskevich@zenclass.ru


Report Page