Skip to main content

JSON API 1.0 (https://jsonapi.org) formatting with marshmallow

Project description

Latest version Travis-CI

Homepage: http://marshmallow-jsonapi.rtfd.org/

JSON API 1.0 (https://jsonapi.org) formatting with marshmallow.

from marshmallow_jsonapi import Schema, fields
from marshmallow_jsonapi.flask import HyperlinkRelated

class PostSchema(Schema):
    id = fields.Str(dump_only=True)
    title = fields.Str()

    author = HyperlinkRelated(
        # Flask endpoint name, passed to url_for
        endpoint='author_detail',
        url_kwargs={'author_id': '<author.id>'},
    )

    comments = HyperlinkRelated(
        endpoint='posts_comments',
        url_kwargs={'post_id': '<id>'},
        # Include resource linkage
        many=True, include_data=True,
        type_='comments'
    )

    class Meta:
        type_ = 'posts'


post_schema = PostSchema()
post_schema.dump(post).data
# {
#     "data": {
#         "id": "1",
#         "type": "posts"
#         "attributes": {
#             "title": "JSON API paints my bikeshed!"
#         },
#         "relationships": {
#             "author": {
#                 "links": {
#                     "related": "/authors/9"
#                 }
#             },
#             "comments": {
#                 "links": {
#                     "related": "/posts/1/comments/"
#                 }
#                 "data": [
#                     {"id": 5, "type": "comments"},
#                     {"id": 12, "type": "comments"}
#                 ],
#             }
#         },
#     }
# }

Error formatting

Schema.load and Schema.validate will return JSON API-formatted Error objects.

from marshmallow import validate
from marshmallow_jsonapi import Schema, fields

class AuthorSchema(Schema):
    id = fields.Str(dump_only=True)
    first_name = fields.Str(required=True)
    last_name = fields.Str(required=True)
    password = fields.Str(load_only=True, validate=validate.Length(6))
    twitter = fields.Str()

    class Meta:
        type_ = 'people'

schema = AuthorSchema()
schema.validate({'first_name': 'Dan', 'password': 'short'})
# {
#     "errors": [
#         {
#             "detail": "Shorter than minimum length 6.",
#             "source": {"pointer": "/data/attributes/password"}
#         },
#         {
#             "detail": "Missing data for required field.",
#             "source": {"pointer": "/data/attributes/last_name"}
#         }
#     ]
# }

Flask integration

Marshmallow-jsonapi has built-in support Flask. See here for example usage.

Documentation

Full documentation is available at https://marshmallow-jsonapi.readthedocs.org/.

Requirements

  • Python >= 2.7 or >= 3.3

License

MIT licensed. See the bundled LICENSE file for more details.

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

marshmallow-jsonapi-0.1.0.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

marshmallow_jsonapi-0.1.0-py2.py3-none-any.whl (10.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file marshmallow-jsonapi-0.1.0.tar.gz.

File metadata

File hashes

Hashes for marshmallow-jsonapi-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9799516982688d4be69cbe10770b59140a83549b1748b77e739f89911f672f8f
MD5 e341c3de31e9cfb9aeec2a300676d247
BLAKE2b-256 6d00d02d95a483e98598a61f4fc8a616301f35ede5be4c135dfae87d206e2fe3

See more details on using hashes here.

Provenance

File details

Details for the file marshmallow_jsonapi-0.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for marshmallow_jsonapi-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f6a73fe5871f744a6349913aa8378b52139e136b8bc8d166511f34822d694b6d
MD5 e79578ce6c42153072ff958fc84aed35
BLAKE2b-256 da0fa34157e539d1a279b009782bfb689e4096dfe81309dbfc351a9b48d13fea

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page