Combining the power of FastAPI and SQLModel, you'll only have to care about modeling your data and we'll take care of building up a RESTful API for it.
from typing import Optional
from sqlmodel import Field
from sqlmodel import SQLModel
from crudapi import CrudAPI
from crudapi.models import BaseModel
class BookUpdate(SQLModel, table=False):
description: Optional[str] = Field(nullable=True)
review: Optional[str] = Field(nullable=True)
class BookCreate(BookUpdate):
title: str = Field(nullable=False)
class Book(BookCreate, BaseModel, table=True):
__tablename__ = "books"
crud = CrudAPI()
crud.include_model(
orm_model=Book,
create_model=BookCreate,
update_model=BookUpdate,
)
you'll get, out of the box, a working crudapi with all these working REST endpoints:
- GET: /books
- POST: /books
- GET: /books/<id>
- PATCH: /books/<id>
- PUT: /books/<id>
- DELETE: /books/<id>
and because CrudAPI subclasses FastAPI you'll also get all the incredible features of this wonderful library, including automatic OpenAPI schema generation and a working SwaggerUI:
Under the /samples directory you'll find some CrudAPIs to help you understand the included features of this library.
Pay special attention to the definitions on samples/models.py and how they relate to the automagically generated OpenAPI specification and APIs.
We've also commited the .vscode/launch.json configuration file. With it, if you are a VSCode user you'll be able to launch some test & debugging servers.
We use Poetry for packaging and dependency management:
poetry install
poetry shell
We use Pytest for testing:
pytest
You can start a testing server running:
uvicorn tests.server:app --reload
This wouldn't be possible without the great people working in the following open source projects. Eternal thanks to all of them.
- SQLAlchemy "The database toolkit for python."
- Starlette "The little ASGI framework that shines."
- pydantic "Data validation and settings management using Python type hinting."
- FastAPI "FastAPI framework, high performance, easy to learn, fast to code, ready for production."
- SQLModel "SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness."