Этот вопрос затрагивает сценарии, когда использование низкоуровневых протоколов (например, WebSocket) напрямую может быть предпочтительнее, чем использование системы внедрения зависимостей FastAPI.
В случаях, когда требуется прямой доступ к данным или протоколам, например, для WebSocket-серверов, может быть удобнее работать напрямую с протоколом, минуя систему внедрения зависимостей.
FastAPI предоставляет удобные средства для работы с HTTP-запросами и маршрутизацией через систему внедрения зависимостей. Однако в некоторых случаях, например, при реализации WebSocket-сервера с использованием бинарных протоколов или других нестандартных сетевых операций, может потребоваться прямой доступ к сокетам или данным.
Пример использования WebSocket с низкоуровневым доступом через Uvicorn:
import uvicorn
from starlette.websockets import WebSocket
async def app(scope, receive, send):
websocket = WebSocket(scope, receive, send)
await websocket.accept()
while True:
data = await websocket.receive_text()
# Обработка данных
await websocket.send_text(f"Processed: {data}")
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8000)Здесь можно напрямую работать с соединением и данным потоком, минуя высокоуровневую абстракцию, как в FastAPI.
Когда использовать:
При низкоуровневых операциях, например, при реализации специфичных сетевых протоколов или использования WebSocket для бинарных данных.