Flask-jsonapi
JSONAPI 1.0 server implementation for Flask.
Installation
This package requires at least python 3.7. To install run: pip install flask-jsonapi. You can install SQLAlchemy support
with: pip install flask-jsonapi[sqlalchemy].
Documentation
Full documentation is available at: https://flask-jsonapi.readthedocs.io/.
Simple example
Let’s create a working example of a minimal Flask application. It will expose a single resource Article as a REST
endpoint with fetch/create/update/delete operations. For persistence layer, it will use an in-memory SQLite database
with SQLAlchemy for storage.
Configuration
import flask
import sqlalchemy
from sqlalchemy.orm import scoped_session
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from marshmallow_jsonapi import Schema, fields
import flask_jsonapi
from flask_jsonapi.resource_repositories import sqlalchemy_repositories
db_engine = sqlalchemy.create_engine('sqlite:///')
session = scoped_session(sessionmaker(bind=db_engine))
Base = declarative_base()
Base.query = session.query_property()
class Article(Base):
__tablename__ = 'articles'
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
title = sqlalchemy.Column(sqlalchemy.String)
Base.metadata.create_all(db_engine)
class ArticleRepository(sqlalchemy_repositories.SqlAlchemyModelRepository):
model = Article
instance_name = 'articles'
session = session
class ArticleSchema(Schema):
id = fields.Int()
title = fields.Str()
class Meta:
type_ = 'articles'
strict = True
class ArticleRepositoryViewSet(flask_jsonapi.resource_repository_views.ResourceRepositoryViewSet):
schema = ArticleSchema
repository = ArticleRepository()
app = flask.Flask(__name__)
api = flask_jsonapi.Api(app)
api.repository(ArticleRepositoryViewSet(), 'articles', '/articles/')
app.run(host='127.0.0.1', port=5000)
Usage
Create a new Article with title “First article”:
curl -H 'Content-Type: application/vnd.api+json' \
-H 'Accept: application/vnd.api+json' \
http://localhost:5000/articles/ \
--data '{"data": {"attributes": {"title": "First article"}, "type": "articles"}}' \
2>/dev/null | python -m json.tool
Result:
{
"data": {
"type": "articles",
"id": 1,
"attributes": {
"title": "First article"
}
},
"jsonapi": {
"version": "1.0"
}
}
Get the list of Articles:
curl -H 'Accept: application/vnd.api+json' \
http://localhost:5000/articles/ \
2>/dev/null | python -m json.tool
Result:
{
"data": [
{
"type": "articles",
"id": 1,
"attributes": {
"title": "First article"
}
}
],
"jsonapi": {
"version": "1.0"
},
"meta": {
"count": 1
}
}
Running tests
virtualenv -p python3.7 ~/flask-jsonapi-virtualenv
. ~/flask-jsonapi-virtualenv/bin/activate
pip install -r base_requirements.txt
pip install -U pytest==3.0.5
pytest
Credits
Some parts of this project were written based on Flask-REST-JSONAPI.
Release files for flask-jsonapi 0.10.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| flask-jsonapi-0.10.3.tar.gz | 20.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| flask_jsonapi-0.10.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 58.2 kB
Release files / flask-jsonapi-0.10.3.tar.gz
| Download URL | flask-jsonapi-0.10.3.tar.gz |
|---|---|
| Size | 20.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f7cfe7ea4e9ade192fb80b6b50a4d2d59759827ea0f798ed93857134702bc4f4
|
|
BLAKE2b-256 checksum How to use checksums |
ccd1777f33c8f84fb57b5f4045b52640a7ece3b5f68db040fb0712d9ddca4132
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1
|
Release files / flask_jsonapi-0.10.3-py3-none-any.whl
| Download URL | flask_jsonapi-0.10.3-py3-none-any.whl |
|---|---|
| Size | 37.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
73351bf16936ddae9e38b96734dc93ec9d43515bc0b0c9813d38a84d07e9b6ca
|
|
BLAKE2b-256 checksum How to use checksums |
f0e09f0c97d9cc62d72ac96bb586b8b4630b08ee1a4211efdb09ba034831c03d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1
|