Usage

To provide an atomic operations api you need to define a new view based on the AtomicOperationView class:

from atomic_operations.views import AtomicOperationView

class ConcretAtomicOperationView(AtomicOperationView):

   # Define the serializers for any operation you want to provide by the view
   serializer_classes = {
      "add:BasicModel": BasicModelSerializer,
      "update:BasicModel": BasicModelSerializer,
      "remove:BasicModel": BasicModelSerializer,
   }

Then register the new defined view as any other view in your django project:

from django.urls import path

from tests.views import ConcretAtomicOperationView

urlpatterns = [
   path("atomic-operations", ConcretAtomicOperationView.as_view())
]

Now you can call the api like below.

POST /atomic-operations HTTP/1.1
Host: example.org
Content-Type: application/vnd.api+json;ext="https://jsonapi.org/ext/atomic"
Accept: application/vnd.api+json;ext="https://jsonapi.org/ext/atomic"

{
   "atomic:operations": [{
      "op": "add",
      "data": {
         "type": "BasicModel",
         "attributes": {
            "title": "JSON API paints my bikeshed!"
         }
      }
   }]
}
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json;ext="https://jsonapi.org/ext/atomic"

{
   "atomic:results": [{
      "data": {
         "links": {
         "self": "http://example.com/basicmodel/13"
         },
         "type": "BasicModel",
         "id": "13",
         "attributes": {
         "title": "JSON API paints my bikeshed!"
         }
      }
   }]
}