Flask extension to create REST web api according to JSONAPI 1.0 specification with Flask, Marshmallow and data provider of your choice (SQLAlchemy, MongoDB, ...)
Project description
flask-rest-jsonapi-next
This is a fork of miLibris/flask-rest-jsonapi project.
flask-rest-jsonapi-next
is a flask extension for building REST APIs around a strong specification
JSON:API 1.0.
Documentation: http://flask-rest-jsonapi-next.readthedocs.io/en/latest/
Install
pip install flask-rest-jsonapi-next
A minimal API
# -*- coding: utf-8 -*-
from flask import Flask
from flask_rest_jsonapi_next import Api, ResourceDetail, ResourceList
from flask_sqlalchemy import SQLAlchemy
from marshmallow_jsonapi.flask import Schema
from marshmallow_jsonapi import fields
# Create the Flask application and the Flask-SQLAlchemy object.
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
# Create model
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
# Create the database.
db.create_all()
# Create schema
class PersonSchema(Schema):
class Meta:
type_ = 'person'
self_view = 'person_detail'
self_view_kwargs = {'id': '<id>'}
self_view_many = 'person_list'
id = fields.Integer(as_string=True, dump_only=True)
name = fields.Str()
# Create resource managers
class PersonList(ResourceList):
schema = PersonSchema
data_layer = {'session': db.session,
'model': Person}
class PersonDetail(ResourceDetail):
schema = PersonSchema
data_layer = {'session': db.session,
'model': Person}
# Create the API object
api = Api(app)
api.route(PersonList, 'person_list', '/persons')
api.route(PersonDetail, 'person_detail', '/persons/<int:id>')
# Start the flask loop
if __name__ == '__main__':
app.run()
This example provides the following API structure:
URL | method | endpoint | Usage |
---|---|---|---|
/persons |
GET | person_list | Get a collection of persons |
/persons |
POST | person_list | Create a person |
/persons/<int:person_id> |
GET | person_detail | Get person details |
/persons/<int:person_id> |
PATCH | person_detail | Update a person |
/persons/<int:person_id> |
DELETE | person_detail | Delete a person |
Thanks
Flask, marshmallow, marshmallow_jsonapi, sqlalchemy, Flask-RESTful and Flask-Restless are awesome projects. These libraries gave me inspiration to create flask-rest-jsonapi-next, so huge thanks to authors and contributors.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for flask-rest-jsonapi-next-0.33.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | e61bb22e3373141fdfdacc2f2f88f55f3711d0b9aa5ce939f208ba01e08ec89e |
|
MD5 | 3d68b3937e5a2f91db18f6927709a676 |
|
BLAKE2b-256 | 0010081eb8c13690555d91c7012428c829380a7f58396b5acbcb34a39929c982 |
Hashes for flask_rest_jsonapi_next-0.33.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dad15e425142c0236e651045e59809ce44e6248fa7eada262d44a661a7154afc |
|
MD5 | 179123556f1f4102311bde289fb77d41 |
|
BLAKE2b-256 | c9153141c7b38e9a2e3022116caba1cb7384a9849ded1a8f7b57313d73da6aca |