Funcan -- это RESTful API web-приложение, разработанное с помощью фреймворка ASP.NET и предназначенное для визуализации графиков функций и отображения особенностей функции на графике. Данное web-приложение запускается и разворачивается как сервер, с которым можно взаимодействовать не только напрямую посредством HTTP запросов, но и с помощью .html страницы в браузере.
При решении математических задач может возникнуть потребность посмотреть, как выглядит график функции в той или иной области, и/или рассмотреть некоторые особенности на этом графике, например: отобразить точки экстремума функции, чтобы наглядно убедиться в том, что они были найдены студентом верно.
Funcan -- это практический целый инструмент, который можно использовать в образовательных целях. Он не только умеет визуалировать и анализровать функции, но и вести историю введенных пользователем функций для его удобства.
Использование RESTful API web-приложения происходит посредством отправки HTTP запросов. Актуальный список всех HTTP запросов, которые поддерживает сервер, с их описанием и примерами можно получить по запросу GET /swagger
. Здесь мы приведем основные из них:
Запрос | Описание |
---|---|
GET /Input |
Получить клиентскую .html страницу (страница осуществляет все запросы ниже сама) |
POST /Function |
Получить список графиков для переданной функции (параметры описаны ниже) |
POST /Function
-- ключевой запрос в логике взаимодействия пользователя с сервером, и он содержит несколько настраиваемых параметров:
Параметр | Тип | Обязателен | Описание |
---|---|---|---|
input |
query | да | Функция, передаваемая как string , график которой мы хотим построить и/или проанализровать |
from |
query | нет | Начало отрезка значений x, на котором будет строится график функции (по умолчанию from =-10.0 ) |
to |
query | нет | Конец отрезка значений x, на котором будет строится график функции (по умолчанию from =10.0 ) |
analysis |
body | да | Список наименований построителей графиков в формате json, которые будут строить графики (список может быть пустым) |
Приведем пример построения графика функции
POST /Function?input=1/x&from=-5&to=5 HTTP/1.1
Content-Type: application/json
[ "function", "discontinuities" ]
Приложение построено согласно принципам DDD, в связи с чем архитектура проекта разделяется на несколько слоев: Application и Domain. В Application слое содержится пользовательская логика взаимодействия с доменом приложения посредством HTTP запросов. В слое Domain, по сути, содержится вся бизнес-логика проекта: используемые модели, сервисы простроения графиков функций, хранящий историю введенных функций репозиторий.
Ключевыми в домене являются абстракции графика функции (plot) и построителя графиков функций (plotter). Plot -- это плоская модель, которая представляет собой просто список точек (x,y). Plotter'ы занимаются построением тех или иных plot'ов по переданной функции, например: FunctionPlotter
-- строит plot, в который входят все точки функции на выбранном отрезке, а ExtremaPlotter
-- строит plot, в который входят лишь точки экстремума функции на выбранном отрезке.
Контроллеры из слоя Application позволяют вызывать сразу несколько plotter'ов, чтобы на выходе получить целый список графиков: график самой функции и/или графики ее особенностей.
Проект поддерживает одну точку расширения, а именно расширение списка поддерживаемых приложением построителей графиков (plotter'ов).
Чтобы добавить новый plotter, который бы, например, строил график периода функции, достаточно всего лишь написать новый класс PeriodicPlotter
, реализующий интерфес IPlotter
, и зарегистрировать его в DI-контейнере в файле Startup.cs
. В результате plotter периода функции автоматически добавится в отображаемый на клиентской странице список поддерживаемых особенностей графика, и им уже можно будет пользоваться, передавая его в POST /Function
запрос.