Структура проекту FastAPI та посібники з найкращих практик

Останнє оновлення: 12/27/2025
Автор: C SourceTrail
  • Вибирайте між макетами на основі типів файлів та макетами на основі функцій, залежно від розміру проєкту, архітектури та потреб команди, маючи головний пріоритет – узгодженість.
  • Використовуйте підказки типів FastAPI, моделі Pydantic та ін'єкцію залежностей, щоб маршрутизація була тонкою, логіка модульною, а валідація — потужною та багаторазовою.
  • Структуруйте безпеку, тестування, асинхронний ввід/вивід та конфігурацію як першокласні завдання, щоб масштабування до продакшену та кількох команд не вимагало повного переписування.
  • Застосуйте чіткі правила іменування, міграції та інструментарію, щоб забезпечити постійну підтримку зростаючого моноліту або парку мікросервісів FastAPI з часом.

Найкращі практики структурування проектів FastAPI

Розробка чистої, масштабованої структури для проєкту FastAPI — це одне з тих рішень, яке спочатку здається незначним, але повністю змінює ваше життя через шість місяців., коли кодова база зросла, команда розширилася, і ви намагаєтеся відстежити помилку в кількох модулях. Гарне макетування пришвидшує адаптацію, зменшує регресії та робить рефакторинг набагато менш болісним.

FastAPI надає вам величезну гнучкість, але це також означає, що ви повинні активно вибирати та застосовувати домовленостіУ цьому посібнику ми зберемо найкорисніші ідеї з реальних, продакшн-проектів FastAPI та відомих репозиторіїв передового досвіду, порівняємо основні макети проєктів та побачимо, як вони взаємодіють з основними концепціями FastAPI, такими як впровадження залежностей, валідація, асинхронний ввід/вивід, тестування та розгортання.

Чому структура проекту так важлива у FastAPI

Міцна структура — це основа, яка забезпечує зрозумілість програми FastAPI, коли вона зростає в розмірі та складності.Без нього навіть фреймворк з чудовою ергономікою швидко перетворюється на купу спеціальних модулів, циклічного імпорту та дубльованої логіки.

З інженерної точки зору, структура безпосередньо впливає на масштабованість: коли модулі розділені, а обов'язки чітко розподілені, можна розділяти сервіси, вводити черги або масштабувати різні частини системи незалежно, не переписуючи все.

Ремонтопридатність – ще одна велика перемогаКоли кожен маршрут, схема та модель бази даних мають передбачуваний дім, розробники витрачають менше часу на пошук файлів і більше часу на вирішення реальних бізнес-проблем. Також стає легше проводити перевірку коду, оскільки всі мають однакову ментальну модель.

У командних проектах узгоджене макетування значно покращує співпрацюНові співробітники можуть визначити, де розміщувати нові функції, фахівці з контролю якості можуть знаходити правильні точки входу для тестування, а DevOps можуть розуміти, які елементи є критично важливими для запуску програми (наприклад, де знаходиться об'єкт ASGI-програми та як підключена база даних).

Ілюстрація макета папки FastAPI

Основні принципи структурування проектів FastAPI

Перш ніж вибирати макет папки, корисно узгодити кілька принципів, якими слід керуватися при прийнятті будь-якого рішення щодо архітектури.Ці ідеї неодноразово з'являються в успішних кодових базах FastAPI.

Поділ турбот це перший стовп: зберігати маршрутизацію, персистентність, бізнес-правила та код інтеграції в різних місцях. Кінцеві точки повинні узгоджувати варіанти використання, а не вбудовувати SQL-запити, маніпуляції JSON та виклики зовнішніх служб в одну довгу функцію.

Модульність – це другий стовпЗамість одного гігантського монолітного пакета, прагніть до менших, сфокусованих модулів або підпакетів, які інкапсулюють пов'язану поведінку. Це значно полегшує повторне використання фрагментів, їх тестування окремо та, зрештою, розділення на мікросервіси, якщо це необхідно.

Впровадження залежностей – це клей, який з'єднує ці модулі без щільного зв'язку.Система залежностей FastAPI дозволяє вам оголосити, що потрібно маршруту або сервісу (сеанс бази даних, конфігурація, автентифікований користувач тощо), і дозволити фреймворку забезпечити це, що ідеально підходить для тестування та повторного використання.

Тестованість сама по собі повинна розглядатися як вимога першого класуЯкщо структура ускладнює розгортання програми в пам'яті, перевизначення залежностей та звернення до кінцевих точок за допомогою тестового клієнта, ви або пропустите тести, або будете боротися з власною архітектурою. Гарна структура зберігає побічні ефекти локальними, а шляхи імпортуються з тестів.

Два домінуючі макети проектів FastAPI: за типом файлу та за функцією

В екосистемі FastAPI ви зазвичай знайдете два чітких сімейства макетів: проекти, організовані за типом файлу (маршрутизатори, моделі, схеми, CRUD), та проекти, організовані за доменом або функцією (авторизація, користувачі, публікації, платежі тощо). Кожен з них проявляється в іншому контексті.

Структура на основі типів файлів (маршрутизатори, схеми, моделі, CRUD)

Підхід до файлових типів відображає те, як багато офіційних прикладів та навчальних посібників представляють FastAPIВи групуєте код відповідно до його технічної ролі: рівень маршрутизації, піддані схеми, моделі баз даних, операції CRUD, утиліти тощо.

Мінімальний, але реалістичний макет може виглядати так (скорочено для ясності):

Приклад макета: .├── app
│ ├── __init__.py
│ ├── main.py # FastAPI app initialization
│ ├── dependencies.py # shared dependencies
│ ├── routers
│ │ ├── __init__.py
│ │ ├── items.py # endpoints for items
│ │ └── users.py # endpoints for users
│ ├── crud
│ │ ├── item.py # item CRUD
│ │ └── user.py # user CRUD
│ ├── schemas
│ │ ├── item.py # pydantic models for items
│ │ └── user.py # pydantic models for users
│ ├── models
│ │ ├── item.py # ORM models for items
│ │ └── user.py # ORM models for users
│ ├── external_services
│ │ ├── email.py # email provider client
│ │ └── notification.py # push / notification client
│ └── utils
│ ├── authentication.py
│ └── validation.py
├── tests
│ ├── test_main.py
│ ├── test_items.py
│ └── test_users.py
├── requirements.txt
└── README.md

У цьому стилі кожен каталог верхнього рівня під app/ має єдину відповідальність, Наприклад, routers/ описує точки входу HTTP, schemas/ оголошує форми вводу/виводу та models/ представляють таблиці бази даних.

Цей макет, як правило, чудово працює для малих та середніх сервісів або мікросервісів.Домен зазвичай достатньо вузький, щоб поділ за технічними ролями не створював тертя. Більшість кінцевих точок використовують один і той самий обмежений набір моделей, і лише кілька команд одночасно працюють над кодом.

Ключові переваги структури файлових типів включають дуже низьке когнітивне навантаження для початківців та дерево каталогів, яке точно відповідає документації FastAPI. Для тих, хто вивчає фреймворк, перегляд спеціального routers/ папку та а schemas/ Використання папки часто здається інтуїтивно зрозумілим, ніж одразу переходити до пакування, орієнтованого на домен.

Структура, орієнтована на функції або модулі, під src/

Оскільки проекти перетворюються на моноліти з багатьма доменами, макет типів файлів починає скрипітиВи отримуєте гігантські каталоги, такі як routers/ з десятками файлів, складним міжмодульним імпортом та бізнес-логікою, розпорошеною по непов'язаних пакетах.

Альтернативою, яка краще масштабується, є структура, що базується на ознаках або керована предметною областю.Тут ви розміщуєте весь код для певного домену в одному підпакеті: маршрути, схеми, моделі, сервіси, конфігурацію та винятки, специфічні для модуля.

Репрезентативна макетна схема, натхненна популярними репозиторіями найкращих практик, виглядає ось так:

Типове дерево файлів: fastapi-project
├── alembic/
├── src
│ ├── auth
│ │ ├── router.py # auth endpoints
│ │ ├── schemas.py # pydantic models
│ │ ├── models.py # DB models
│ │ ├── dependencies.py # auth-specific dependencies
│ │ ├── config.py # local configs
│ │ ├── constants.py # auth error codes / constants
│ │ ├── exceptions.py # auth-specific exceptions
│ │ ├── service.py # business logic
│ │ └── utils.py # helpers
│ ├── aws
│ │ ├── client.py
│ │ ├── schemas.py
│ │ ├── config.py
│ │ ├── constants.py
│ │ ├── exceptions.py
│ │ └── utils.py
│ ├── posts
│ │ ├── router.py
│ │ ├── schemas.py
│ │ ├── models.py
│ │ ├── dependencies.py
│ │ ├── constants.py
│ │ ├── exceptions.py
│ │ ├── service.py
│ │ └── utils.py
│ ├── config.py # global configs
│ ├── models.py # shared DB models
│ ├── exceptions.py # shared exceptions
│ ├── pagination.py # reusable pagination logic
│ ├── database.py # DB connection & session management
│ └── main.py # FastAPI app factory / entry point
├── tests
│ ├── auth
│ ├── aws
│ └── posts
├── templates
│ └── index.html
├── requirements
│ ├── base.txt
│ ├── dev.txt
│ └── prod.txt
├── .env
├── logging.ini
└── alembic.ini

У цьому світі src/ є вершиною внутрішнього дерева застосунківКожен домен, як-от auth or posts, стає майже міні-сервісом: він має власний маршрутизатор, схеми, моделі, константи, типи помилок та рівень бізнес-сервісів.

Головна перевага — локальність змін: коли ви додаєте нову функцію до posts, вам рідко доводиться торкатися будь-якого непов'язаного пакета. Тести також можуть існувати разом зі своїми функціями (наприклад, під tests/posts/), що сприяє ширшому охопленню.

Ця структура особливо підходить для монолітних застосувань з багатьма доменами та командами, де ви хочете підтримувати паралельну роботу та зменшити конфлікти злиття. Він також добре поєднується з концепціями дизайну, орієнтованими на предметну область, такими як обмежені контексти та агрегати.

Домени та модулі FastAPI

Вибір правильного макета для вашого проекту FastAPI

Вибір між типом файлу та структурою на основі функцій полягає не в правильному чи неправильному варіанті, а у відповідності вашої архітектури та очікуванням щодо зростання.Крихітний внутрішній інструмент лише з кількома кінцевими точками не отримає великої користі від складної структури домену.

Для мікросервісів та вузькоспеціалізованих API макет файлового типу зазвичай простішийКожен сервіс часто зосереджується на одному обов'язку (API виставлення рахунків, відправник сповіщень, мікросервіс звітності), і розробники вже інтуїтивно знають, де розміщувати нові маршрути або схеми.

Для більших монолітів розщеплення за доменами майже завжди виграє в довгостроковій перспективі.Коли у вас є модулі для профілів, підписок, контенту, платежів, аналітики тощо, розміщення кожного маршрутизатора в одному каталозі стає хаотичним. Групування за функціями зберігає кожен сегмент системи автономним.

Також врахуйте структуру вашої командиЯкщо одна невелика команда володіє всією кодовою базою, узгодженість може бути легше підтримувати за допомогою простого макета. Якщо кілька команд ділять моноліт, і кожна з них володіє доменною областю, структура на основі функцій дозволяє їм рухатися швидше, не наступаючи один одному на ногу.

Що б ви не обрали, послідовність важливіша за точну форму дереваЗміна макета посеред проєкту — це болісно, ​​тому обдумування на ранній стадії та написання короткого внутрішнього посібника зі стилю окупиться пізніше.

Розуміння самого FastAPI: що ви структуруєте

Щоб розробити розумну структуру, вам потрібна чітка ментальна модель того, що FastAPI насправді робить для вас.По суті, FastAPI — це веб-фреймворк ASGI, орієнтований на створення HTTP API за допомогою Python 3.7+ з використанням підказок типів.

FastAPI значною мірою спирається на Pydantic для перевірки даних та серіалізаціїВін пропонує набагато більше, ніж просто поля «обов’язкові проти необов’язкових»; ви можете виражати розширені обмеження та перетворення безпосередньо у ваших моделях.

Оскільки схема OpenAPI походить безпосередньо з ваших кінцевих точок та моделей, FastAPI також генерує інтерактивну документацію.З коробки ви отримуєте інтерфейс Swagger за адресою /docs та ReDoc у /redoc, які є безцінними під час співпраці з фронтенд-розробниками або сторонніми інтеграторами.

Під капотом FastAPI працює поверх ASGI-серверів, таких як Uvicorn.Це дозволяє вашому додатку ефективно обробляти багато одночасних підключень і без зайвих церемоній активує такі функції, як довготривалі підключення WebSocket.

FastAPI також чітко визначає запити та відповідіКожна кінцева точка — це просто звичайна функція Python (sync або async), декорована @app.get, @app.post та друзі, отримуючи дані шляху/запиту/тіла та повертаючи відповідь, зазвичай dict або модель Pydantic.

Асинхронність проти синхронізації: як продуктивність перетинається зі структурою

FastAPI розроблений, перш за все, як асинхронний фреймворк, але він підтримує як асинхронні, так і синхронізовані кінцеві точки.Розуміння їхньої внутрішньої поведінки вплине на те, як ви проектуватимете сервіси, вибиратимете клієнтів та структуруватимете модулі, що обробляють ввод-вивод.

Коли ви оголошуєте async def маршрут, FastAPI запускає його безпосередньо в циклі подійФреймворк припускає, що будь-які тривалі операції всередині будуть неблокуючими об'єктами очікування, такими як драйвер асинхронної бази даних або HTTP-клієнт, побудований на asyncio.

Якщо ви випадково здійснюєте блокувальні дзвінки (наприклад time.sleep(), цикли з навантаженням на процесор або повільні бібліотеки, які синхронно виконують мережевий ввід/вивід) всередині цих асинхронних маршрутів, ви фактично заморозите цикл подійЖодні інші запити не будуть оброблені, доки ця операція не завершиться, що суперечить меті асинхронізації.

Синхронізаційні маршрути поводяться по-різному: FastAPI виконує їх у пулі потоківБлокування роботи в цих маршрутах утримує лише робочий потік, а не весь цикл подій, тому сервер все ще може приймати нові запити. Саме так FastAPI залишається гнучким, коли вам доводиться покладатися на синхронні бібліотеки.

Ті ж принципи застосовуються до залежностейПідтримуються як синхронні, так і асинхронні залежності, але синхронні залежності також виконуються в пулі потоків. Для крихітних помічників, які не є функціями вводу/виводу, часто краще позначити їх як асинхронні, щоб уникнути накладних витрат та обмежень потоків, коли це не потрібно.

Робочі навантаження, обмежені процесором, – це окрема історія.Незалежно від того, чи запускаєте ви їх синхронно чи асинхронно всередині процесу, GIL (глобальне блокування інтерпретатора) означає, що лише один потік виконує байт-код Python одночасно. Для таких завдань, як обробка важких даних, перекодування зображень або логічний висновок, розгляньте можливість передачі роботи виконавцям в окремих процесах або зовнішніх чергах.

Перевірка та формування даних за допомогою Pydantic

Pydantic — це рушій, що стоїть за функціями валідації та серіалізації FastAPI.Він пропонує набагато більше, ніж просто поля «обов’язкові проти необов’язкових»; ви можете виражати розширені обмеження та перетворення безпосередньо у ваших моделях.

Типові випадки використання включають перевірку довжини рядка, числових діапазонів, форматів електронної пошти або складних вкладених структурМоделі також можуть використовувати перелічення, регулярні вирази, користувацькі валідатори та багато інших інструментів для очищення вхідних даних, перш ніж вони потраплять у вашу бізнес-логіку.

Потужним шаблоном є визначення власної базової моделі для вашого проєктуУспадковуючи всі схеми від одного базового класу, ви можете стандартизувати взаємопов'язану поведінку, таку як формат серіалізації дати та часу, допоміжні методи, що повертають лише значення, безпечні для JSON, або загальні прапорці конфігурації.

Pydantic чудово підходить для чистої валідації даних, але він нічого не знає про вашу базу даних чи зовнішні сервіси.Якщо ваші правила залежать від запиту (наприклад, перевірка існування ідентифікатора користувача або унікальності електронної пошти), загальноприйнятою практикою є переміщення цих валідацій у залежності, а не у валідатори моделей Pydantic.

Таким чином, ви зберігаєте декларативність схем та повторно використовуєте перевірки на кількох кінцевих точках.Залежність може отримувати сутність, застосовувати правила доступу та вставляти результат у маршрут, тоді як FastAPI кешує свій результат для кожного запиту, щоб уникнути дублювання роботи, коли та сама залежність використовується кілька разів.

Залежності як будівельний блок для чистої архітектури

Система впровадження залежностей FastAPI — це не просто синтаксичний цукор для параметрів; це основний архітектурний інструмент.Правильне використання залежностей дозволяє вам спільно використовувати логіку, застосовувати інваріанти та зберігати маршрути дуже короткими та виразними.

Типові приклади включають постачальники сеансів бази даних, завантажувачі конфігурації, помічники автентифікації та парсери пагінаціїЗамість того, щоб вручну відкривати та закривати сесії чи повторювати параметри пагінації всюди, ви оголошуєте їх один раз як залежності та використовуєте повторно.

Тонка, але важлива порада щодо дизайну — розбити залежності на невеликі, компоновані одиниціЗамість одного гіганта get_current_user_with_all_checks функція, у вас можуть бути окремі залежності для розбору JWT, завантаження користувача, перевірки активності облікового запису та перевірки того, чи користувач володіє певним ресурсом.

Оскільки FastAPI кешує результати залежностей в одному запиті, їх створення є дешевим.Якщо три різні залежності повторно використовують допоміжний метод нижчого рівня (наприклад, для розбору тверджень JWT), цей допоміжний метод запускатиметься лише один раз на запит, навіть якщо на нього посилаються кілька разів.

Під час проектування маршрутів іменування шляхів може як сприяти, так і перешкоджати повторному використанню залежностей.Наприклад, якщо кілька кінцевих точок підтверджують, що profile_id існує, використання того самого імені послідовно в параметрах шляху спрощує підключення однієї залежності, яка спирається на profile_id, замість того, щоб винаходити безліч варіацій, таких як creator_id що несуть той самий зміст.

Безпека, автентифікація та авторизація у вашій структурі

Безпека — це одна з сфер, де чітка структура швидко окупаєтьсяБезпосереднє поєднання логіки автентифікації з випадковими маршрутами ускладнює аудит правил доступу та спрощує випадкове розкриття даних.

Поширеною закономірністю в макетах на основі функцій є наявність auth пакет із власним маршрутизатором, схемами, сервісним рівнем та виняткамиЦей модуль оброблятиме реєстрацію користувачів, процеси входу, видачу та перевірку токенів, а також може визначати залежності, такі як get_current_user які імпортують інші модулі.

У цьому пакеті auth ви можете підтримувати кілька механізмів автентифікації, як-от OAuth2 з паролем та токенами носія, ключі API для викликів між сервісами або токени на основі JWT для API без збереження стану. FastAPI fastapi.security Утиліти також допомагають вам описати ці потоки в OpenAPI.

Вкрай важливо відокремлювати автентифікацію (хто є користувачем) від авторизації (що йому дозволено робити).Ваша структура має чітко вказувати, де знаходяться перевірки дозволів: наприклад, на спеціальному рівні служби або політики, а не розсіяних спеціалізованих процесів. if заяви на кожному маршруті.

Щоразу, коли ви маєте справу з паролями, дотримуйтесь встановлених криптографічних практикХешуйте секрети за допомогою повільного, «солоного» алгоритму, такого як bcrypt або argon2, через надійні бібліотеки, уникайте ручного криптографування та ставтеся до зберігання токенів, захисту CSRF та безпеки транспортування (HTTPS) як до першокласних елементів дизайну.

Ефективне тестування застосунків FastAPI

Структура та тестування підсилюють одне одного: чисте макетування природно призводить до кращого тестування коду.За допомогою FastAPI ви можете тестувати на кількох рівнях, від чистих модульних тестів сервісів до повних інтеграційних тестів, що охоплюють рівень HTTP.

Модульні тести повинні зосереджуватися на невеликих фрагментах без побічних ефектів: чисті функції, валідатори Pydantic, бізнес-сервіси, що працюють з даними в пам'яті. Вони, як правило, дуже швидкі та є вашою першою лінією захисту від регресій.

Для тестування реальних кінцевих точок HTTP ви можете використовувати вбудований тестовий клієнт на базі Starlette або сучасні асинхронні клієнти, такі як httpxІдея полягає в тому, щоб імпортувати ваш застосунок, перевизначити залежності за потреби (наприклад, ввести тестовий сеанс бази даних) та надсилати запити без запуску зовнішнього сервера.

Якщо ви працюєте з драйверами асинхронних баз даних або іншими асинхронними інтеграціями, варто налаштувати клієнт асинхронного тестування з самого початку.Змішування стилів синхронного та асинхронного тестування пізніше часто призводить до заплутаних проблем із циклом подій, які важче налагодити, ніж просто стандартизувати один підхід.

Використання бази даних у тестах також взаємодіє з вашою структуроюМаючи централізований database.py Модуль, який визначає фабрики двигунів та сесій, спрощує розгортання тестових баз даних, обгортання тестів у транзакції або використання фікстур, які обрізають таблиці між запусками.

Від локальної розробки до розгортання у виробництві

Програми FastAPI легко запускати локально, але вимагають трохи більше планування у продакшені.Структура вашого проєкту повинна чітко пояснювати, як створюється додаток, звідки береться конфігурація та як пов’язані ведення журналу та перевірки справності.

Для розробки більшість команд використовують Uvicorn з автоматичним перезавантаженням, зазвичай за допомогою команди типу uvicorn app.main:app --reload або, в новіших системах, fastapi devЦе забезпечує швидкі цикли зворотного зв'язку та ідеально підходить для ітерацій.

У виробництві зазвичай потрібна більш надійна конфігураціяПрацівники Uvicorn або Hypercorn, якими керує супервайзер процесів або обгортка WSGI/ASGI, така як Gunicorn, часто за зворотним проксі-сервером (NGINX або керований балансувальник навантаження). Мета полягає в контролі кількості працівників, тайм-аутів та коректних перезапусків, на основі інформації сучасні практики DevOps.

Конфігурацію слід керувати змінними середовища, а не жорстко запрограмованими значеннямиІнструменти керування налаштуваннями Pydantic або аналогічні можуть допомогти вам оголошувати класи типізованих налаштувань та завантажувати їх під час запуску, централізуючи всі специфічні для середовища регулятори в одному місці.

Перш ніж називати свій додаток готовим до використання, перевірте кілька важливих моментів: структуроване логування, базові метрики, кінцеві точки справності для зондів активності та готовності, розумні обмеження розміру тіла та чітка політика щодо розкриття документації лише в непублічних середовищах, якщо ваш API не призначений для загального використання.

Найменування, проектування баз даних та міграції

Те, як ви називаєте елементи у своїх моделях та файлах схем, також є частиною структури вашого проекту.Непослідовне найменування — один із найшвидших способів заплутати розробників, які працюють над кодовою базою, яку вони не створювали.

Проста та ефективна домовленість полягає в використанні lower_case_snake назви таблиць і стовпців, надавайте перевагу іменам таблиць в однині (наприклад post, post_like, user_playlist) та групувати пов'язані таблиці за допомогою спільного префікса, такого як payment_ or post_.

Для темпоральних полів використовуються суфікси типу _at для дат і часу та _date для простих дат зберігайте чіткістьСуворість тут запобігає грі вгадування «це позначка часу чи дата?» під час читання схем або необроблених запитів.

Міграції заслуговують на особливу увагу; вони повинні бути детермінованими, оборотними та описовими — розгляньте наступне практики міграції баз данихБагато команд використовують шаблон для назв файлів міграції, наприклад YYYY-MM-DD_slug.py, що спрощує відстеження історії та розуміння змін без читання повного переліку змін.

Для складних звітів або вкладених відповідей використовуйте свою базу даних, а не надмірну обробку на PythonСучасні SQL-рушії можуть виконувати об'єднання, агрегації та побудову JSON набагато швидше, ніж CPython, а повернення попередньо сформованих структур до FastAPI часто спрощує ваші моделі відповідей.

Інструменти, форматування та командні домовленості

Добре структурований проєкт легше підтримувати в чистоті, якщо залучити інструменти для забезпечення дотримання правил стилюФорматувальники коду, лінтери та перехоплювачі перед комітами допомагають вам зосередитися на бізнес-логіці, а не сперечатися про пробіли під час перегляду коду.

Останнім часом такі інструменти, як Ruff, стали популярними, оскільки вони поєднують кілька ролей в однійЗамість того, щоб поєднувати окремі утиліти для форматування, сортування імпорту та зв'язування, ви можете запустити один швидкий інструмент, який застосовує сотні правил по всій кодовій базі.

Запуск цих інструментів за допомогою простого скрипта або пре-комітів забезпечує низький рівень ризику.Не кожній команді потрібна складна система перехоплень, але наявність хоча б однієї команди, яка стандартизує макет коду, — це легка перемога.

Зрештою, подумайте про документування ваших внутрішніх правил у короткому «інженерному посібнику» що посилання гнучкі методи розробки програмного забезпеченняОпишіть, як слід називати модулі, коли створювати новий пакет домену, як структурувати тести та які шаблони безпеки є обов'язковими. Це запобігає тому, щоб знання жили лише в головах старших розробників.

Проектування структури проєкту FastAPI насправді полягає в тому, щоб зробити майбутню роботу передбачуваною та нудною.: коли кожна нова кінцева точка, модель чи сервіс має очевидне місце розташування, розробники можуть швидко рухатися без несподіванок, безпеку легше перевіряти, а додаток має набагато більше шансів пережити реальне зростання, не руйнуючи його під власною вагою.

Пов'язана стаття:
Вирішено: швидкий синтаксис шаблону API
Схожі повідомлення: