Skip to main content

Write REST API quickly

Project description

frest

How to create a REST API very quickly.

Installation

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

Use

Create a project

(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.

Create first app

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.

Move scheme routes inside app

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)
[...]

Database creation

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")
);

Start app

Inside project file you have to run python app.py and it's done.

TODO

  • Migrations of database in case of edits
  • Put automatically routes inside app file
  • More datatype
  • Relantionships (1-to-1, 1-to-n, n-to-n)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

frest-0.1.5.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

frest-0.1.5-py3-none-any.whl (14.2 kB view details)

Uploaded Python 3

File details

Details for the file frest-0.1.5.tar.gz.

File metadata

  • Download URL: frest-0.1.5.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.22.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.5

File hashes

Hashes for frest-0.1.5.tar.gz
Algorithm Hash digest
SHA256 23e315cf6196d19181bb72be2dce505ecc9f0573069e0910eec7a9185ee57de2
MD5 736fc776492698fc55ad60d50c10e1b8
BLAKE2b-256 d0b98fcde65a08da81cebc13ba84ecb470990df22e8d2d2c39edfabc92ff108e

See more details on using hashes here.

File details

Details for the file frest-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: frest-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 14.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.22.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.5

File hashes

Hashes for frest-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 b0da434a0343ac1b7e514b8ed79f9eb2694842cc5c018a497a08c4ec2a620d8f
MD5 d3a3daaadbf0c8223c482c077a3bc7df
BLAKE2b-256 ccf832bd5d2ede15ba24d14bec6350dae256ce17186ac5ee3a8f0d46d1252f5b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page