Muffin‑REST
Muffin‑REST simplifies building RESTful APIs with Muffin by offering:
- Declarative
APIclass with resource registration - Built-in filtering, sorting, pagination, and search
- Support for:
- Peewee ORM via
PeeweeEndpoint - SQLAlchemy Core via
SAEndpoint - MongoDB via
MongoEndpoint
- Peewee ORM via
- Swagger/OpenAPI autodocumentation
- Works with asyncio, Trio, and Curio
Requirements
- Python >= 3.11
- Trio requires Peewee backend
Installation
Install core package:
pip install muffin-rest
Add optional backend support:
- SQLAlchemy Core:
pip install muffin-rest[sqlalchemy] - Peewee ORM:
pip install muffin-rest[peewee] - YAML support for Swagger:
pip install muffin-rest[yaml]
Quickstart (Peewee example)
from muffin import Application
from muffin_rest import API
from muffin_rest.peewee import PeeweeEndpoint
from models import User # your Peewee model
app = Application("myapp")
api = API(title="User Service", version="1.0")
@api.route
class UsersEndpoint(PeeweeEndpoint):
class Meta:
model = User
lookup_field = "id"
filters = ["name", "email"]
ordering = ["-created_at"]
api.setup(app, prefix="/api", swagger=True)
Endpoints available:
GET /api/users/— list with pagination, search, filteringPOST /api/users/— createGET /api/users/{id}/— retrievePUT /api/users/{id}/— replacePATCH /api/users/{id}/— updateDELETE /api/users/{id}/— remove- Docs:
/api/docs/, OpenAPI spec:/api/openapi.json
Usage with SQLAlchemy
from muffin_rest import API
from muffin_rest.sqlalchemy import SAEndpoint
from models import my_table, db_engine
api = API()
@api.route
class MySAEndpoint(SAEndpoint):
class Meta:
table = my_table
database = db_engine
api.setup(app)
Usage with MongoDB
from muffin_rest import API
from muffin_rest.mongo import MongoEndpoint
from models import mongo_collection
api = API()
@api.route
class MyMongoEndpoint(MongoEndpoint):
class Meta:
collection = mongo_collection
api.setup(app)
Advanced Configuration
Customize Swagger and routes via constructor:
api = API(
title="Service API",
version="2.1",
swagger_ui=True,
openapi_path="/api/openapi.json",
docs_path="/api/docs/"
)
Contributing & Examples
- See
examples/for live application demos - Tests in
tests/focus on filtering, pagination, status codes - Check
CHANGELOG.mdfor latest changes
Bug Tracker
Report bugs or request features: https://github.com/klen/muffin-rest/issues
Contributing
Repo: https://github.com/klen/muffin-rest Pull requests, example additions, docs improvements welcome!
Contributors
- klen (Kirill Klenov)
License
Licensed under the MIT license.
Release files for muffin-rest 14.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| muffin_rest-14.1.1.tar.gz | 24.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| muffin_rest-14.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 61.4 kB
Release files / muffin_rest-14.1.1.tar.gz
| Download URL | muffin_rest-14.1.1.tar.gz |
|---|---|
| Size | 24.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7c95bcced53c2d38b49ea610cb2551759040da18f436e1194f6bc56bd5a51632
|
|
BLAKE2b-256 checksum How to use checksums |
c5ae1db9306344a9ba8c11e738c520123cf3ac04a279ece4de56a6ce0e75817c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / muffin_rest-14.1.1-py3-none-any.whl
| Download URL | muffin_rest-14.1.1-py3-none-any.whl |
|---|---|
| Size | 37.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f3a4a9bac84b4fe16b700842f89ae45738fc2d4c6fb1020cbad71e583d71aac4
|
|
BLAKE2b-256 checksum How to use checksums |
ca02c0c4290d93e737dbcaebe6df04c324fdd09a2a89fb895ef12a3173169f3f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|