Доступ к данным через АПИ используется повсеместно. Самый распространенный пример - приложения с клиент-серверной архитектурой. В данной работе сервер предоставляет клиенту доступ к данным. Из этого можно сделать вывод, что вопрос проектирования API крайне актуален, потому что количество приложений, которые используют клиент-серверную архитектуру велико.
Потребность в таком API возникла в ходе работы над проектом для финансовой компании. Требовались данные для:
1. Идентификации клиента по 115 ФЗ 07.08.2001г.;
2. Проверка клиента на банкротство;
3. Формирование отчета по клиентам.
Для этого проекта требовалось решение, поддерживающее динамическую структуру данных, а также позволяющее избежать over и under fetching при передаче данных.
В ситуации, когда данные, API к которым предоставляется, имеют динамическую структуру, задача проектирования API значительно усложняется. Это связано с тем, что исключается возможность обработки и оптимизации некоторых частных случаев, которая была бы возможна в ситуации со статической структурой. Подобные задачи возникают, когда предметная область подразумевает некоторую изменению в структуре данных. Так, например, в случае с финансовой отраслью, структура данных меняется в следствии принятия новых законов, влияющих на связи между различными правовыми субъектами, либо на структуру подотчетных документов.
В ходе проведённого анализа существующих подходов к проектированию API с точки зрения решения проблемы over и under fetching, а также поддержки динамической структуры данных были рассмотрены такие API, как REST, RESTfull, CRUD и т. д. Показано, что существующие решения не подходят для решения нашей задачи, с точки зрения перечисленных выше требований.
Для решения поставленных проблем предложено API. Ключевой идеей предложенного решения, является использование динамической схемы GraphQL. Это должно позволить пользователю задавать и менять метаданные для сущностей и далее работать с ними. GraphQL даст возможность получать только те поля сущности, которые нужны пользователю в конкретном запросе, что позволит избежать проблемы over и under fetching при запросах.
Целью работы является разработка серверной части для финансовой компании, которая представляет собой API доступа к данным с динамически изменяющейся структурой, что позволит более эффективно проводить операции с финансовыми игнструментами
Для достижения поставленной цели следует:
1. Изучить и проанализировать существующие принципы построения API.
2. Изучить и сформулировать требования, к разрабатываемому приложению.
3. Выполнить проектирование серверной части системы, выбрать технологии, которые станут использоваться в дальнейшем.
4. Разработать серверную часть системы.
Разбор существующих подходов к проектированию API выполнен с помощью вектора вариантов. Анализ и проектирование проиллюстрированы в рамках нотации UML. На этапе реализации были использованы алгоритмы кэширования, графов, а также такие технологии как .net Core, GraphQL, Jenkins, Reddis, Oracle и т. д.