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
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
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
db.create_all()
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()
class PersonList(ResourceList):
schema = PersonSchema
data_layer = {'session': db.session,
'model': Person}
class PersonDetail(ResourceDetail):
schema = PersonSchema
data_layer = {'session': db.session,
'model': Person}
api = Api(app)
api.route(PersonList, 'person_list', '/persons')
api.route(PersonDetail, 'person_detail', '/persons/<int:id>')
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.