How to create a REST API very quickly.
Install frest by pip package (you must have Python>=3.6). In this example I'm using virtualev, a tool for virtual environment creation.
$ virtualenv env
$ source env/bin/activate
(env) $ pip install frest
(env) $ frest --init project
__ _
/ _| | |
| |_ _ __ ___ ___| |_
| _| '__/ _ \/ __| __|
| | | | | __/\__ \ |_
|_| |_| \___||___/\__|
Create project/... OK
Create project/__init__.py... OK
It will create a project tree folder like this one:
- database.py
A file with DATABASE_URI, database path, default is
sqlite:///database.db. - mail.py A file with mail configuration: server, port, password etc.
- app.py A file with routes and mail/database configuration.
- wsgi.py File used for production.
Inside project folder, we start to create a new app. For example, we want to store books inside our database.
(env) $ cd project/
(env) $ frest --startapp book
It will print something like this:
__ _
/ _| | |
| |_ _ __ ___ ___| |_
| _| '__/ _ \/ __| __|
| | | | | __/\__ \ |_
|_| |_| \___||___/\__|
Create scheme/... OK
Create scheme/book... OK
Create scheme/book/__init__.py... OK
Create model for book...
Fields id, created_at, updated_at are default on every new model, you can delete it from model file
Create field? (Y/n):
Now we have to define a model for our book, using 6 data types: integer, string, text, datetime, float, bool.
This is an example of our book with name and pubblication date:
Choose field name: name
Choose field type: int, str, text, datetime, float, bool str
Choose string size: 20
Field is nullable? (Y/n): n
Create new field? (Y/n):
Choose field name: pubblication_date
Choose field type: int, str, text, datetime, float, bool datetime
Field is nullable? (Y/n): n
Create new field? (Y/n): n
Create scheme/book/models.py... OK
Create scheme/book/forms.py... OK
Create scheme/book/routes.py... OK
Now, our book it will be inside scheme/book.
Edit project/app.py and put your routes inside.
[...]
from frest.auth.routes import api as api_users
from scheme.book.routes import api as api_books
[...]
app.register_blueprint(api_books)
[...]
Open python interpreter, import db and create.
from app import db
db.create_all()
Now exit and check your scheme inside database. It will be something like this.
CREATE TABLE user (
"userId" INTEGER NOT NULL,
email VARCHAR(30),
password VARCHAR(30),
is_admin BOOLEAN,
name VARCHAR(30),
created_at DATETIME,
PRIMARY KEY ("userId"),
CHECK (is_admin IN (0, 1))
);
CREATE TABLE book (
"bookId" INTEGER NOT NULL,
name VARCHAR(20) NOT NULL,
pubblication_date DATETIME NOT NULL,
created_at DATETIME,
updated_at DATETIME,
PRIMARY KEY ("bookId")
);
CREATE TABLE token (
"tokenId" INTEGER NOT NULL,
string VARCHAR(20),
created_at DATETIME,
expired BOOLEAN,
user_id INTEGER NOT NULL,
PRIMARY KEY ("tokenId"),
CHECK (expired IN (0, 1)),
FOREIGN KEY(user_id) REFERENCES user ("userId")
);
Inside project file you have to run python app.py and it's done.
- Migrations of database in case of edits
- Put automatically
routesinside app file - More datatype
- Relantionships (1-to-1, 1-to-n, n-to-n)