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.post1.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.post1-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: frest-0.1.5.post1.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.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.post1.tar.gz
Algorithm Hash digest
SHA256 abeb2d5662ca8d4357d49180edab525706f05449b0c9ed49afb47ec06372ff13
MD5 246cb31644f94dad9a2c50c58b86d9e0
BLAKE2b-256 a111872a9cc9e2e3f064163b41043ee21ac058ff2ec5e30435d7ac4c1301eb98

See more details on using hashes here.

File details

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

File metadata

  • Download URL: frest-0.1.5.post1-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.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.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 9b8d551e892e71661bb672431bbea8108172b716c10236f6f831de618989b258
MD5 b4e4ca1cd55ed3eb859d401bdef8b329
BLAKE2b-256 33d956bb40366394afabb39c934a0da8d7e5dc34a107c97527d30fdeb0aa7c23

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