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.34.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5bcc82d6c58452e9fc444310042f81939155d956d6369c04a62464506d50191f |
|
MD5 | 5008744d5393378482655fb06eff720a |
|
BLAKE2b-256 | d5f4c9ca9b7b1b98068655d58f134eb2263c2adcc324146dc86aad79fcf13fe6 |
Hashes for flask_rest_jsonapi_next-0.34.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ccaeaed99e4bfa0c21a120deb7220b06f09b32add848dedb6eeff2abefb5217c |
|
MD5 | 96911890e7e45490e295e20578364287 |
|
BLAKE2b-256 | 14616492b29dd7614beac17beafd482084a92e07931753724adade84426382a8 |