Проектирование и разработка API на С# .Net 6

Проектирование и разработка API на С# .Net 6

Наше API было создано на .net framework 4.5, который уже устарел. Поэтому недавно мы перешли на .Net 6 и начали налаживать внутреннюю архитектуру и процессы взаимодействия между бэкенд частью и фронтендом (React-приложением). Хотим поделиться опытом проектирования и разработки API на .Net 6 и рассказать, какие методы и практики мы используем.

Наша разработка происходит в несколько этапов:

  1. Сначала проектируются эндпоинты, которые ограничивают бизнес-логику, связанную с функциональностью.
  2. Эндпоинты разделяются, чтобы каждый выполнял конкретную задачу и возвращал только соответствующие данные.
  3. Важно учесть, что API может иметь несколько версий, чтобы обеспечить совместимость с клиентским приложением и не привести к нарушению работоспособности. Изменения вносятся только в новые версии API, а старые версии продолжают работать без изменений, но добавляется признак что эндпоинт устарел.
  4. В нашем случае используется React-приложение, поэтому проект соответствует определенным требованиям, например, RestFul API. Он должен быть легким для понимания, безопасным, эффективным, а также иметь понятную структуру и смысл:
    • Использование уникальных URI.
    • HTTP-методы, определяются API и включают: GET, POST, PUT и DELETE, которые могут быть использованы для работы с ресурсами. При разработке API важно определить, какие методы будут поддерживаться для каждого ресурса.
    • Данные должны быть представлены в определенном формате (JSON или XML), который определяется при проектировании API. В нашем случае всегда используется JSON, так как React-приложение использует JavaScript Object Notation для обмена данными между сервером и клиентом.
    • API не хранит состояние клиента между запросами. Вместо этого, клиент передает необходимую информацию в каждом запросе, обеспечивая безопасность и надежность работы. При разработке API не следует хранить информацию о клиенте на сервере, ведь это не только снижает нагрузку на сервер, но и позволяет достичь более высокой производительности и эффективности.
    • API должен использовать коды состояния HTTP для передачи информации о выполнении запросов. В нашем случае мы всегда отправляем код 200 success, а состояние ответа передаем в теле ответа.
    • API использует кэширование для повышения производительности и снижения нагрузки на сервер.
  5. При создании нейминга в проекте мы придерживаемся нескольких важных критериев:
    • все названия объектов должны быть написаны в CamelCase - одном из самых популярных стилей программирования на языке C#;
    • нейминг строится вокруг реальных сущностей, существующих в проекте. Например, если в проекте есть объект accountDatabase, то по этому объекту будет построен эндпоинт "/accountDatabase";
    • мы используем существительные, вместо глаголов, а для того чтобы установить смысл запроса и улучшить его читабельность используем разные HTTP-методы - GET, POST, PUT или DELETE;
    • для простых GET-запросов используем path-параметры, а для сложных запросов с фильтрами - query-параметры, в остальных случаях передаем данные в body;
    • нейминг самих параметров пишется при помощи CamelCase.
  6. Для React-приложений, работающих с удаленным сервером API на другом домене, необходима настройка политики CORS, чтобы обеспечить поддержку отправки кросс-доменных запросов.
  7. React-приложения должны пройти аутентификацию и авторизацию, чтобы взаимодействовать с API. Важно, чтобы API соответствовал требованиям приложения и поддерживал механизмы аутентификации и авторизации. Мы используем JWT Bearer токены для этого.
  8. Для работы с большими объемами данных на React-приложениях рекомендуется осуществлять пагинацию на стороне бэка. Это позволит загружать данные по мере необходимости и ускорить загрузку страниц на стороне клиента.
  9. Мы реализовали в проекте ONION-архитектуру, разбив обработку запросов на логические уровни (аутентификация, проверка ролей, валидация, работа с БД). Сейчас еще рассматриваем внедрение CQRS и MediatR.

Наше API проходит данные процессы при разработке новой функциональности. Из-за быстрого развития IT-сферы, мы постоянно корректируем и дорабатываем наши технологии и подходы, чтобы соответствовать современным требованиям бизнеса. Важно помнить, что все правила разработки определяет бизнес, и каждое новое требование должно соответствовать его потребностям. Это не рекомендации к разработке вашего API, мы всего лишь делимся своим опытом и подходами.

Спасибо за внимание!

Комментарии для сайта Cackle