fastapi-sio
Socket.io FastAPI integration library with first-class documentation using AsyncAPI
The usage of the library is very familiar to the experience you‘re used to in FastAPI. Automatic documentation, type hints everywhere and heavy use of Pydantic.
Features
- First-class generated specification & documentation
- Uses python_socketio underneath
- Fully typed using pydantic, including the AsyncAPI spec
- Streamlined emit to clients (learn more in docs)
- Forces strictly to emit correct data type (see the example)
What‘s Missing?
- Serve AsyncAPI studio at /sio/docs
- Unfortunately, AsyncAPI studio doesn‘t work the same way as Swagger UI, there is currently no way to use CDN hosted built package and supply only single html file and URL with spec JSON
- Support for more obscure fields of AsyncAPI, such as
traits
, ...
Usage Example
fastapi_app = FastAPI()
sio_app = FastAPISIO(app=fastapi_app)
purr_channel = sio_app.create_emitter(
"purrs",
model=PurrModel,
summary="Channel for purrs",
description="Receive any purrs here!",
)
@sio_app.on(
"rubs",
model=BellyRubModel,
summary="Channel for belly rubs",
description="Send your belly rubs through here!",
)
async def handle_rub(sid, data):
await purr_channel.emit(
PurrModel(loudness=2, detail="Purr for all listeners")
)
return "Ack to the one who rubbed"
By default (you can change these values):
- the Socket.io endpoint path is
/sio/socket.io
(thesocket.io
part is set automatically by some clients) - The AsyncAPI spec file is at
/sio/docs/asyncapi.json
Find more in the examples.
Documentation & Reference
Refer to the /docs directory to learn how to use this library in your project.
TODO: This documentation will be hosted on Github Pages in the near future, hopefully.
Contribution
...
Used by
Feel free to open a PR to add your project or company to this list.