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.post2.tar.gz (12.4 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.post2-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for frest-0.1.5.post2.tar.gz
Algorithm Hash digest
SHA256 5c02b8f31ac8f4246b83fcc766d4c704b9f32fa36cd4841663cd4b8c88530cef
MD5 f1a2c4ad92291d740d73bc8a4cf4fb7a
BLAKE2b-256 a982a891442a66391ac869324d32629afed3f2e9de5bd5a6e2cac7c9b6b80f1d

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for frest-0.1.5.post2-py3-none-any.whl
Algorithm Hash digest
SHA256 0101c4dfda9723c226d8dd2df63a7d732a0064d9c5b94e500b24507393db71bc
MD5 7d763203f7e123c7bab865a8668312c2
BLAKE2b-256 d2f3ba043411499c1f4c9e2f14af766c3a0b37953ac5d6e6d4278beaedddb138

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