Skip to main content

JSON API driven by aiohttp

Project description

JSON API implementation for aiohttp Documentation Status Updates


This project heavily inspired by py-jsonapi (author is Benedikt Schmitt). Some parts of this project is improved and refactored dev-schema branch of py-jsonapi. At beginning of aiohttp-json-api this branch was a great, but not finished implementation of JSON API with schema controllers. Also, py-jsonapi is not asynchronous and use inside self-implemented Request/Response classes.

Some of base entities of py-jsonapi was replaced with aiohttp server’s objects, some of it was divided into new separate entities (e.g. JSONAPIContext or Registry).


  • Tutorials
  • Improve documentation
  • Tests
  • Features description
  • Customizable payload keys inflection (default is dasherize <-> underscore)
  • Support for JSON API extensions (bulk creation etc.)
  • Polymorphic relationships


This package was created with Cookiecutter and the cookiecutter-pypackage project template.


0.37.0 (2018-03-03)

  • Drop Python 3.5 support
  • Update documentation

0.36.1 (2018-03-03)

  • Fix bug with content negotiation
  • Add cherry-picked and improved helpers from python-mimeparse

0.36.0 (2018-03-02)

  • Improve content negotiation (fix #185) with python-mimeparse
  • Update requirements

0.35.2 (2017-12-13)

  • Fix bug with wrong query parameters of links in compound documents

0.35.1 (2017-12-12)

  • Fix trafaret requirement to 1.0.2 (included rfc3339.Date)

0.35.0 (2017-12-11)


  • Schema is separated into Schema (marshaller) and Controller
  • Request context instantiated in handlers and was renamed to JSONAPIContext
  • Change signature of setup JSON API method in application (now we should pass a mapping between schemas and controllers)
  • New abstract base class for Controller
  • Schema and Controller must be initialized with only one parameter — JSONAPIContext
  • Passing a context to almost each method of Schema no more required (context is accessible from Schema or Controller instance directly)
  • Remove decorator for JSON API handlers (content negotiation moved to middleware)
  • Refactored fields and schema modules
  • Improved fetching of compound documents
  • Examples are updated to conform with all changes in this release

0.33.1 (2017-12-06)

  • Fix bug with no Accept header in request

0.33.0 (2017-12-06)

  • Improve content type negotiation
  • Improve documentation
  • Add field for Date
  • Add example based on fantasy database
  • Introduce JSON API integration test suite (not done yet!)
  • Improve collections helpers
  • No more links normalization by default
  • Move meta object at top level of result document

0.32.0 (2017-11-21)

  • Constants, enums and structs refactoring (backward incompatible)
  • Add useful typings
  • Documentation fixes
  • Extend development requirements

0.31.0 (2017-11-14)

  • Improve performance of URL resolving again. At this time with usage of standard Python urllib
  • Upgrade requirements

0.30.0 (2017-11-13)

  • Improve performance of URL resolving in Link field (with cachetools)
  • Upgrade requirements

0.29.2 (2017-11-02)

  • Documentation improvements

0.29.1 (2017-11-02)

  • Update README
  • Upgrade requirements

0.29.0 (2017-11-02)

  • Simple example of usage is added
  • Fix bug in handler of relationship query

0.28.3 (2017-11-02)

  • Fix bug with wrong read-only field error
  • Don’t require setup ID field in Schema to update a resource

0.28.2 (2017-11-01)

  • Add multidict to requirements and to README

0.28.1 (2017-10-31)

  • Fix small bug with wrong empty sorting in RequestContext

0.28.0 (2017-10-31)

  • Add support for customizable inflection of fields from query string.
  • Convert static methods of RequestContext to class methods
  • Update docs of RequestContext methods

0.27.1 (2017-10-31)

  • Fix packaging of ABCs and compats

0.27.0 (2017-10-31)

  • Abstract base classes refactoring (separate Field and Schema ABCs)
  • Fix bug with compound documents in case models has no property “resource_id”
  • Remove buggy helper to check subclass of any instance
  • Decompose setup application method to increase readability
  • Properly error raised in jsonapi_handler decorator
  • Use one field instead of two to check what type of relation have the field

0.26.0 (2017-10-30)

  • Properly use abstract base classes. Inherit SchemaABC from ABC.
  • Rename resource validation methods (backward incompatible)

0.25.0 (2017-10-18)

  • Add Tuple field
  • Fix bug with List field items enumeration
  • Fix wrong conversion of Decimal field to string on deserialization
  • Add yarl (>=0.13) to requirements

0.24.1 (2017-10-12)

  • Add support for length range specifying for List field

0.24.0 (2017-10-04)

  • Convert document render utility to async coroutine (backward incompatible)
  • Rename Error class property “json” to “as_dict” to clarify

0.23.0 (2017-10-03)

  • Use MultiDict for request context filters and FilterRule tuple (backward incompatible)
  • Debug info on request context creation

0.22.2 (2017-09-27)

  • Add support for nullable List field

0.22.1 (2017-09-25)

  • Fix bug with wrong exit from compound documents fetch utility (“return” instead of “break”)

0.22.0 (2017-09-22)

  • Remove recursive fetching of compound documents. Replace it with simple loop.

0.21.2 (2017-09-22)

  • Fix bug with fetching compound documents when query parameter “include” contains the same relation twice and more.

0.21.1 (2017-09-19)

  • Fix bug with non-underscored relation name in relationship handlers

0.21.0 (2017-09-19)

  • Add support for field names conversion passed to “include” request context
  • Update development requirements

0.20.2 (2017-08-30)

  • Avoid assertion in Registry ensure identifier method
  • Make Schema getter of object id static
  • Avoid to filter out empty fields of rendered documents (less memory and faster)
  • Get id field of schema more safely in URI resource ID validator

0.20.1 (2017-08-15)

  • Add support for load only fields (like a Marshmallow)

0.20.0 (2017-08-14)

  • Asynchronous validators support
  • Routes namespace can be customized
  • Relative links support

0.19.1 (2017-08-10)

  • Improve serialization result default keys creation

0.19.0 (2017-08-10)

  • Refactor schema serializer to fix bug with no resource link in result
  • Clean-up validation of expected ID in pre-validaiton of resource
  • Use status property of ErrorList in error middleware to return HTTP status
  • Remove default getter from Link field, because it doesn’t used anymore

0.18.1 (2017-08-09)

  • Migrate to trafaret >= 0.11.0
  • Fix requirement of trafaret to version greater than 0.11.0

0.18.0 (2017-08-09)

  • Properly handle missing values in deserialization and validation

0.17.1 (2017-07-31)

  • Add support for validation of Relationships ID field

0.17.0 (2017-07-28)

  • Normalize resource_id parameter usage in all mutation methods.
  • Add fetch_resource schema coroutine to receive resource instance by ID.
  • Add separate method for mapping deserialized data to schema.
  • Context is required parameter for deserialization schema method.
  • Move docs to ABC schema.
  • Properly handle allow_none parameter for UUID field

0.16.2 (2017-07-24)

  • Fix arguments passed to validators

0.16.1 (2017-07-24)

  • Pass context to value setter in update methods

0.16.0 (2017-07-22)

0.15.2 (2017-07-21)

  • Initialize default relationships links in meta-class, to avoid bug with empty names of relationships fields

0.15.1 (2017-07-19)

  • Rename resource ID parameter of query_resource schema’ method.

0.15.0 (2017-07-18)

  • Pagination is initialized from request by default. Remove separate class method of BasePagination to initialize pagination instance
  • Improve value validation error for absent fields
  • Improve validation error of string field with choices

0.14.0 (2017-07-13)

  • Customisable JSON API handlers support
  • DRY in handlers
  • Move context builder from middleware to jsonapi_handler decorator
  • Request context receive optional resource_type now

0.13.0 (2017-07-12)

  • Revert back to asynchronous setters, because it’s used in update relationships and it might want to query DB, for example

0.12.0 (2017-07-12)

  • Base Registry class from UserDict, so Registry is a dict with ensure_identifier method.
  • More strict typing checks on setup.

0.11.1 (2017-07-11)

  • Fix bug with mutation not cloned resource in method for delete relationship
  • Require JSON API content type on delete relationships

0.11.0 (2017-07-11)

  • Method for update return original and updated resource as result. Updated resource is created via deepcopy. It will be useful to determine returned HTTP status
  • Fix bug with enumeration (choices) in String field
  • Fix bug with context event setup for OPTIONS, HEAD and another request methods not used in JSON API

0.10.0 (2017-07-10)

  • Mass refactoring of schema, fields, validation and decorators
  • Generic approach to setup Schema decorators is used (inspired by Marshmallow)
  • Fields are used only for encode/decode now (with pre/post validation). Additional validators for fields must be created on schema level
  • Custom JSON encoder with support JSONPointer serialization
  • Remove boltons from requirements
  • No more remap input data dictionary with key names to underscores conversion.
  • Add helpers “first” and “make_sentinel” (cherry-picked from boltons)
  • Fix enumeration (choices) support in String field

0.9.3 (2017-07-06)

  • Setup content-type validation on mutation API methods (application/vnd.api+json is required)
  • Properly get and encode relationships fields
  • Update docs and typing for ensure_identifier Registry’s method

0.9.2 (2017-07-06)

  • Fix bugs related to Python 3.5
  • Generation of documentation on RTD is fixed

0.9.1 (2017-07-06)

  • Python 3.5 compatibility changes

0.9.0 (2017-07-06)

  • Handle aiohttp-json-api exceptions and errors in middleware. If exceptions is not related to JSON API errors, then exception is reraised
  • Huge refactoring of RequestContext
  • No more use of boltons cachedproperties, instead use parsing static methods related to each request context’ entity
  • Update docs for RequestContext methods
  • Add typings to RequestContext

0.8.2 (2017-07-05)

  • Properly handle error with wrong relation name (raise HTTP 400)

0.8.1 (2017-07-05)

  • Fix bdist_wheel python tag to support Python 3.5

0.8.0 (2017-07-05)

  • Python 3.5 support (avoid usage of Python 3.6 format strings)
  • Registry is plain object now
  • Custom Registry support (registry_class parameter in aiohttp_json_api.setup_jsonapi method)
  • Log debugging information at start about registered resources, methods and routes
  • Use OrderedDict inside SchemaMeta

0.7.2 (2017-07-04)

  • Fix bug with JSONPointer when part passed via __truediv__ is integer
  • Validate relationship object before adding relationship in ToMany field

0.7.1 (2017-07-04)

  • Fix bugs with validation of resource identifier in relationships fields
  • Add typings for base fields

0.7.0 (2017-07-03)

  • Setup of JSON API must be imported from package directly
  • Fix bugs with decode fields and allow None values

0.6.2 (2017-06-29)

  • Update HISTORY

0.6.1 (2017-06-29)

  • Fix bug with Enum choices of String field

0.6.0 (2017-06-29)

  • Return resource in update method of Schema class. This will be helpful in inherit classes of Schemas.

0.5.5 (2017-06-15)

  • Setup auto-deploy to PyPI in Travis CI

0.5.4 (2017-06-15)

  • Initial release on PyPI

0.5.3 (2017-06-14)

  • Improve documentation

0.5.0 (2017-06-14)

  • Don’t use attrs package anymore
  • Refactor requirements (move it into

0.4.0 (2017-06-13)

  • Schema imports refactoring (e.g. don’t use aiohttp_json_api.schema.schema.Schema anymore)

0.3.0 (2017-06-13)

  • Upgrade requirements

0.2.0 (2017-05-26)

  • Fix
  • Add test for Decimal trafaret field

0.1.1 (2017-05-26)

  • Dirty initial version

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

aiohttp_json_api-0.37.0.tar.gz (113.9 kB view hashes)

Uploaded source

Built Distribution

aiohttp_json_api-0.37.0-py36-none-any.whl (60.8 kB view hashes)

Uploaded py36

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page