Skip to content

Latest commit

 

History

History
65 lines (49 loc) · 7.22 KB

README-ru.md

File metadata and controls

65 lines (49 loc) · 7.22 KB

Простая платформа вопросов и ответов

License Version

Система реализует функционал простейшей платформы вопрос-ответ. Она состоит из клиента и сервера, которые общаются по протоколу HTTP с использованием JSON. Сервер ни при каких обстоятельствах не является инициатором запроса, поэтому его можно назвать пассивным. Клиент отправляет серверу запрос, после чего сервер отвечает данными в формате JSON, либо только выставляет код успешности выполнения запроса (HTTP response code). Поддерживаются запросы как GET, так и POST. Первый тип используется для запроса данных клиентом с сервера. Если всё проходит успешно, в ответ сервер отправляет JSON. Второй тип запроса (POST) используется для отправки данных клиентом на сервер. В ответ сервер отправляет код успешности выполнения запроса.

В общем виде система представлена на рисунке ниже (более тёмным выделены блоки, активные в GET или POST запросах):

Структурная диаграмма (SVG)

Особенности сервера

Разработанный сервер для общения с клиентом использует HTTP и JSON, а для хранения данных использует SQLite, с которым взаимодействует при помощи Entity Framework Core. Поддерживается многопользовательский режим (одновременная работа нескольких пользователей с сервером). В программе есть специальный класс провайдера доступа к хранилищу данных (базе данных), структура которого будет рассмотрена на UML диаграмме классов. Структура (схема) базы данных представлена ниже.

Структурная схема БД (SVG)

Сервер в GET-запросах принимает следующие параметры:

  • question – параметр, которому можно присвоить заголовок вопроса, ответы на который пользователь хочет посмотреть;
  • question_pattern – параметр, которому можно присвоить шаблон заголовка вопроса, в результате чего будут выданы вопросы, подходящие под шаблон;
  • startindex – необязательный параметр, показывает с какого места выборки отправить данные (если выборка большая её можно разбить на несколько запросов);
  • count – необязательный параметр, сколько элементов выборки, начиная с указанного, отправить клиенту.

Сервер в POST-запросах принимает следующие параметры:

  • question – параметр, которому нужно присвоить заголовок вопроса, ответ на который пользователь хочет отправить;

Сервер выполняет сортировку данных выборки по дате и времени добавления (в порядке от более поздней к более ранней), которые берёт с компьютера, на котором запущен. Если не указать параметр question и question_pattern, то в зависимости от типа запроса GET или POST, будет запрошен список вопросов или ожидаться отправка вопроса.

UML диаграмма

Диаграмма UML (SVG)

Особенности клиента

Клиент имеет консольный интерфейс и имеет парсер команд, поддерживающий работу с выделенными при помощи кавычек строками, а также игнорирование лишних отступов и регистра команд.

В клиенте пользователь может работать в нескольких контекстах, имеющих следующую иерархию (контекст – это уровень списка):

  • написать вопрос (команда ask)
  • получить список вопросов (команда list)
    • смотреть следующие n вопросов (команда next)
    • смотреть предыдущие n вопросов (команда prev)
    • просмотреть вопрос (команда view)
      • ответить на вопрос (команда answer)
      • смотреть следующие n ответов (команда next)
      • смотреть предыдущие n вопросов (команда prev)
      • просмотреть ответ (команда view)
  • искать вопрос (команда find)
    • смотреть следующие n вопросов (команда next)
    • смотреть предыдущие n вопросов (команда prev)
    • искать другой вопрос (команда find)
    • просмотреть вопрос (команда view)
      • ответить на вопрос (команда answer)
      • смотреть следующие n ответов (команда next)
      • смотреть предыдущие n вопросов (команда prev)
      • просмотреть ответ (команда view)

Меню просмотра вопроса универсально как для обычного списка вопросов, так и для списка, полученного в результате поиска. На клиенте реализованы все необходимые проверки для минимизации ответов об ошибках с сервера.