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!"
}
}
}]
}