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!"
}
}
}]
}
Bulk operating
By default all operations are sequential db calls. This package provides also bulk operating for creating and deleting resources. To activate it you need to configure the following.
from atomic_operations.views import AtomicOperationView
class ConcretAtomicOperationView(AtomicOperationView):
sequential = False