FastAPI автоматически генерирует документацию для RESTful API, но поддержка WebSocket не так развита, как для обычных маршрутов. Тем не менее, вы можете предоставить информацию о ваших WebSocket-соединениях и их использовании с помощью описаний и аннотаций.
Вот пример того, как можно организовать документацию для WebSocket в FastAPI:
```python
from fastapi import FastAPI, WebSocket
from fastapi.responses import HTMLResponse
from fastapi import WebSocketDisconnect
from typing import List
app = FastAPI()
# Список для хранения активных соединений
active_connections: List[WebSocket] = []
@app.get("/")
async def get():
return HTMLResponse(content="""
<html>
<head>
<title>WebSocket Example</title>
</head>
<body>
<h1>WebSocket</h1>
<form action="" onsubmit="return sendMessage(event)">
<input type="text" id="messageText" autocomplete="off" />
<button>Send</button>
</form>
<ul id='messages'></ul>
<script>
var ws = new WebSocket("ws://localhost:8000/ws");
ws.onmessage = function(event) {
var messages = document.getElementById('messages');
var message = document.createElement('li');
message.appendChild(document.createTextNode(event.data));
messages.appendChild(message);
};
function sendMessage(event) {
var input = document.getElementById("messageText");
ws.send(input.value);
input.value = '';
event.preventDefault();
}
</script>
</body>
</html>
""")
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
active_connections.append(websocket)
try:
while True:
data = await websocket.receive_text()
# Отправляем сообщение обратно всем активным соединениям
for connection in active_connections:
await connection.send_text(f"Message: {data}")
except WebSocketDisconnect:
active_connections.remove(websocket)
```
### Комментарии к коду:
1. **WebSocket Endpoint**: В этом примере создается WebSocket эндпоинт `"/ws"`, который принимает соединения и обрабатывает сообщения.
2. **HTML Страница**: На главной странице отображается простой HTML, который использует WebSocket для отправки и получения сообщений.
3. **Обработка сообщений**: Когда клиент отправляет сообщение, оно рассылается всем активным соединениям.
### Документация:
Для окончательной документации WebSocket-соединений вам нужно будет предоставить дополнительную информацию, например:
- Как открыть соединение.
- Формат сообщений.
- Ожидаемое поведение приложения.
- Инструкции о том, как подключаться и взаимодействовать с WebSocket.
Если хотите создать более полную документацию, можно использовать Swagger UI или Redoc (которые предоставляет FastAPI для RESTful API) и дополнить их блоками, описывающими ваши WebSocket-операции. В качестве альтернативы, вы можете использовать Markdown-файлы или другую систему документации для создания более подробного описания вашего WebSocket API.