Задача

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

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

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

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

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

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

Запрос

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

Ответ

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

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

Методы

Метод "Table"

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

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

Пример ответа (таблица 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. Важно: посещаемость сервиса будет высокая, не должно быть возможности превысить число записавшихся.

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

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

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

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

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

Метод PostNews

Вставить новость. Новость сразу (без премодерации) попадает в общий список новостей. Важно: новость одного и того же участника не должна дублироваться.

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

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

{ "status": "ok", "message": "Спасибо, ваша новость сохранена!" }

Заключение

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