Getting Started Sample Project¶
Flarchitect ships with a tiny demo that shows how it turns a SQLAlchemy model into a REST API.
The sample lives in demo/quickstart/load.py and defines a single Author model.
Running the script starts a local server and exposes the model at /api/author, returning an empty list until you add data.
1import datetime
2
3from flask import Flask
4from flask_sqlalchemy import SQLAlchemy
5from sqlalchemy import Date, Integer, String, Text
6from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
7
8from flarchitect import Architect
9
10
11# Create a base model that all models will inherit from. This is a requirement for the auto api creator to work.
12# Don't, however, add to any of your models when using flask-sqlalchemy, instead, inherit from `db.model` as you
13# would normally.
14class BaseModel(DeclarativeBase):
15 def get_session(*args):
16 return db.session
17
18
19# Create a new flask app
20app = Flask(__name__)
21
22# Create a new instance of the SQLAlchemy object and pass in the base model you have created.
23db = SQLAlchemy(model_class=BaseModel)
24
25# Set the database uri to an in memory database for this example.
26app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///:memory:"
27
28# Set the required fields for flarchitect to work.
29app.config["API_TITLE"] = "My API"
30app.config["API_VERSION"] = "1.0"
31app.config["API_BASE_MODEL"] = db.Model
32
33
34# Create a new model that inherits from db.Model
35class Author(db.Model):
36 __tablename__ = "author"
37
38 class Meta:
39 # all models should have class Meta object and the following fields which defines how the model schema's are
40 # references in redocly api docs.
41 tag_group = "People/Companies"
42 tag = "Author"
43
44 id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
45 first_name: Mapped[str] = mapped_column(String)
46 last_name: Mapped[str] = mapped_column(String)
47 biography: Mapped[str] = mapped_column(Text)
48 date_of_birth: Mapped[datetime] = mapped_column(Date)
49 nationality: Mapped[str] = mapped_column(String)
50 website: Mapped[str | None] = mapped_column(String)
51
52
53with app.app_context():
54 # initialize the database with the app context
55 db.init_app(app)
56 # create the database tables
57 db.create_all()
58 # initialize the Architect object with the app context
59 Architect(app)
60
61# Run the app
62if __name__ == "__main__":
63 app.run(debug=True)
64
65# To access the API documentation, navigate to http://localhost:5000/docs
Run the demo¶
python demo/quickstart/load.py
curl http://localhost:5000/api/author
The curl command answers with a JSON payload that includes some metadata and a value list of authors.
Because the demo starts with no records, that list is empty:
{
"total_count": 0,
"value": []
}
Pop open http://localhost:5000/docs in your browser to explore the automatically generated API docs.