| FastAPI |   | 
| Добавил(а) microsin | 
| FastAPI это современный, быстрый фреймворк web для построения API на стандартных типах Python. Ключевые фичи FastAPI: ● Fast: очень высокая производительность на основе NodeJS и Go. Один из самых быстрых доступных фреймворков Python. Примечание (*): оценка основана на внутренних тестах команды разработчиков, сборке рабочих приложений. [Typer, FastAPI для CLI] Если вы разрабатываете CLI-приложение в терминале вместо web API, рассмотрите Typer [2]. Typer - младший брат FastAPI. И это должен быть FastAPI интерфейса командной строки. FastAPI стоит на плечах гигантов: Starlette [3] для частей web. [Установка FastAPI] Создайте и активируйте виртуальное окружение (например на основе pyenv), и затем установите FastAPI (убедитесь, что заключили "fastapi[standard]" в кавычки, чтобы это работало во всех терминалах): $ pip install "fastapi[standard]"
[Простой пример приложения] Сервер, обрабатывающий запросы GET. Создайте файл main.py: from typing import Union Если ваш код использует async/await, то примените async def: from typing import Union Примечание: если вы не понимаете, что такое async/await, то см. [5]. Запустите этот скрипт командой: $ fastapi dev main.py
Команда fastapi dev прочитает файл main.py, обнаружит в нем приложение FastAPI и запустит сервер, используя Uvicorn. По умолчанию fastapi dev запустится с разрешенной фичей auto-reload для локальной разработки. Подробнее об этом можно прочитать в документации FastAPI CLI [6]. Для проверки работы этого сервера откройте в браузере ссылку http://127.0.0.1:8000/items/5?q=somequery и вы увидите текстовое сообщение ответа в формате JSON: {"item_id":5,"q":"somequery"}
Этими простыми действиями вы создали следующий интерфейс с веб-сервером (API): ● Сервер принимает HTTP-запросы в пути / и /items/{item_id}. Для созданного вами приложения веб-сервера main.py из коробки доступна документация. Вы можете открыть её по ссылкам в браузере: http://127.0.0.1:8000/docs#/ Апгрейд: добавление обработки запроса PUT. Давайте теперь изменим файл main.py, чтобы сервер принимал запрос PUT. Тело запроса декларируется с помощью стандартных типов Python, благодаря классу Pydantic. from typing import Union Проверим работу запроса PUT с помощью сервиса интерактивной документации, по ссылке http://127.0.0.1:8000/docs#/: Разверните выпадающий список PUT, нажмите на кнопку "Try it out", это позволит заполнить поля запроса item_id и отредактировать текст тела запроса "Request body". После этого нажмите на кнопку Execute. В логе сервера вы увидите сообщения "PUT /items/1234 HTTP/1.1" 200: INFO Will watch for changes in these directories: ['/home/appFastAPI']
INFO Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO Started reloader process [57266] using WatchFiles
INFO Started server process [57320]
INFO Waiting for application startup.
INFO Application startup complete.
INFO 127.0.0.1:48966 - "GET /docs HTTP/1.1" 200
INFO 127.0.0.1:48966 - "GET /openapi.json HTTP/1.1" 200
INFO 127.0.0.1:54810 - "PUT /items/1234 HTTP/1.1" 200
INFO 127.0.0.1:43518 - "PUT /items/1234 HTTP/1.1" 200
INFO 127.0.0.1:43518 - "PUT /items/1234 HTTP/1.1" 200
Резюме. В общем, вы декларируете однократно типы параметров, тело и прочее как параметры функции. Это делается с помощью стандартных современных типов Python. Вам не нужно изучать новый синтаксис, методы или классы конкретной библиотеки и т. д. Это просто стандартный Python. Например, для типа int: item_id: int
Или для более сложной модели Item: item: Item ... и с такой одиночной декларацией вы получите: 1. Поддержку редактора, включая: 2. Проверку допустимости данных: 3. Преобразование входных данных: данные, поступающие по сети, преобразуются в данные и типы Python. Поддерживается чтение из: 4. Преобразование выходных данных: из данных и типов Python в сетевые данные (в виде JSON): 5. Автоматическая интерактивная документация для вашего созданного API, включая 2 альтернативных пользовательских интерфейса: Если вернуться к последнему примеру кода, то FastAPI будет делать следующее: 1. Проверит наличие item_id в пути для запросов GET и PUT. 2. Проверит, что у item_id тип int для запросов GET и PUT. - Если это не так, то клиент увидит понятное сообщение об ошибке. 3. Проверит наличие опционального параметра запроса с именем q (как в http://127.0.0.1:8000/items/foo?q=somequery) для запросов GET.   - Поскольку параметр q декларирован с = None, то он опциональный (его наличие необязательно). 4. Для запросов PUT /items/{item_id} тело считывается как JSON:   - Проверяется, что требуемый атрибут name имеет тип str. 5. Автоматическое преобразование в JSON и обратно. 6. Все документируется с OpenAPI, что может использоваться:   - Интерактивными системами документации. 7. Напрямую предоставляются 2 вида интерактивной web-документации. На сайте https://fastapi.tiangolo.com/ вы можете также ознакомиться с руководствами: 1. Декларация параметров из других различных мест: headers, cookies, form fields и files. 2. Устанавливать ограничения для проверки параметров, такие как maximum_length или regex. 3. Очень мощная и простая в использовании система инжекции зависимостей (Dependency Injection). 4. Безопасность и аутентификация, включая поддержку для OAuth2 с токенами JWT и базовой аутентификацией HTTP (HTTP Basic auth). 5. Более продвинутые (но все еще несложные) техники для декларации глубоко вложенных моделей JSON (благодаря Pydantic). 6. Интеграция GraphQL со Strawberry и другими библиотеками. 7. Множество дополнительного функционала (благодаря Starlette):   - WebSockets [Ссылки] 1. FastAPI Source Code. |