Facebook-like implementation of batch requests
Project description
DRF batch requests
=====================
[![PyPI version](https://badge.fury.io/py/drf-batch-requests.svg)](https://badge.fury.io/py/drf-batch-requests)
[![Travis CI](https://travis-ci.org/roman-karpovich/drf-batch-requests.svg?branch=master)](https://travis-ci.org/roman-karpovich/drf-batch-requests)
[![Coverage Status](https://coveralls.io/repos/github/roman-karpovich/drf-batch-requests/badge.svg?branch=master)](https://coveralls.io/github/roman-karpovich/drf-batch-requests?branch=master)
[![Code Health](https://landscape.io/github/roman-karpovich/drf-batch-requests/master/landscape.svg?style=flat)](https://landscape.io/github/roman-karpovich/drf-batch-requests/master)
[![Python Versions](https://img.shields.io/pypi/pyversions/drf-batch-requests.svg?style=flat-square)](https://pypi.python.org/pypi/drf-batch-requests)
[![Implementation](https://img.shields.io/pypi/implementation/drf-batch-requests.svg?style=flat-square)](https://pypi.python.org/pypi/drf-batch-requests)
Quick start
-----------
examples:
```
curl -X POST \
http://127.0.0.1:8000/batch/ \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{"batch": [
{
"method": "get",
"relative_url": "/test/",
"name": "yolo"
},
{
"method": "post",
"relative_url": "/test/?id={result=yolo:$.id}&ids={result=yolo:$.data.*.id}",
"body": {"data": {"id": "{result=yolo:$.id}", "ids": "{result=yolo:$.data.*.id}"}, "test": "yolo"}
},
{
"method": "post",
"relative_url": "/test/",
"body": "{\"data\": 42}",
"omit_response_on_success": true
},
{
"method": "options",
"relative_url": "/test/"
}
]
}'
```
using file uploading
```
curl -X POST \
http://127.0.0.1:8000/batch/ \
-H 'cache-control: no-cache' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F 'batch=[
{
"method": "get",
"relative_url": "/test/",
"name": "yolo"
},
{
"method": "post",
"relative_url": "/test/?id={result=yolo:$.id}&ids={result=yolo:$.data.*.id}",
"body": {"data": "{result=yolo:$.data.*.id}", "test": "yolo"},
"attached_files":{"file": "a.jpg"}
},
{
"method": "post",
"relative_url": "/test/",
"body": "{\"data\": 42}",
"omit_response_on_success": true,
"attached_files":["a.jpg", "b.png"]
},
{
"method": "options",
"relative_url": "/test/"
}
]' \
-F b.png=@2476.png \
-F a.jpg=@check_133.pdf
```
Future features:
- add support for requests pipelining. use responses as arguments to next requests (done)
- build graph based on requests dependencies & run simultaneously independent.
- ~~switchable atomic support. true - all fails if something wrong. else - fail only dependent (can be very hard to support on front-end side, but for now seems as good feature)~~ run all requests in single transaction. (done)
- ~~use native django. we don't use complicated things that require drf for work. all can be done with "naked" django.~~ (since we validate requests with drf serializers, it's better to leave as it is).
- support files uploading (done)
Dependencies:
- Django starting from 1.9
- Django rest framework (3.6 for 1.9 django)
=====================
[![PyPI version](https://badge.fury.io/py/drf-batch-requests.svg)](https://badge.fury.io/py/drf-batch-requests)
[![Travis CI](https://travis-ci.org/roman-karpovich/drf-batch-requests.svg?branch=master)](https://travis-ci.org/roman-karpovich/drf-batch-requests)
[![Coverage Status](https://coveralls.io/repos/github/roman-karpovich/drf-batch-requests/badge.svg?branch=master)](https://coveralls.io/github/roman-karpovich/drf-batch-requests?branch=master)
[![Code Health](https://landscape.io/github/roman-karpovich/drf-batch-requests/master/landscape.svg?style=flat)](https://landscape.io/github/roman-karpovich/drf-batch-requests/master)
[![Python Versions](https://img.shields.io/pypi/pyversions/drf-batch-requests.svg?style=flat-square)](https://pypi.python.org/pypi/drf-batch-requests)
[![Implementation](https://img.shields.io/pypi/implementation/drf-batch-requests.svg?style=flat-square)](https://pypi.python.org/pypi/drf-batch-requests)
Quick start
-----------
examples:
```
curl -X POST \
http://127.0.0.1:8000/batch/ \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d '{"batch": [
{
"method": "get",
"relative_url": "/test/",
"name": "yolo"
},
{
"method": "post",
"relative_url": "/test/?id={result=yolo:$.id}&ids={result=yolo:$.data.*.id}",
"body": {"data": {"id": "{result=yolo:$.id}", "ids": "{result=yolo:$.data.*.id}"}, "test": "yolo"}
},
{
"method": "post",
"relative_url": "/test/",
"body": "{\"data\": 42}",
"omit_response_on_success": true
},
{
"method": "options",
"relative_url": "/test/"
}
]
}'
```
using file uploading
```
curl -X POST \
http://127.0.0.1:8000/batch/ \
-H 'cache-control: no-cache' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F 'batch=[
{
"method": "get",
"relative_url": "/test/",
"name": "yolo"
},
{
"method": "post",
"relative_url": "/test/?id={result=yolo:$.id}&ids={result=yolo:$.data.*.id}",
"body": {"data": "{result=yolo:$.data.*.id}", "test": "yolo"},
"attached_files":{"file": "a.jpg"}
},
{
"method": "post",
"relative_url": "/test/",
"body": "{\"data\": 42}",
"omit_response_on_success": true,
"attached_files":["a.jpg", "b.png"]
},
{
"method": "options",
"relative_url": "/test/"
}
]' \
-F b.png=@2476.png \
-F a.jpg=@check_133.pdf
```
Future features:
- add support for requests pipelining. use responses as arguments to next requests (done)
- build graph based on requests dependencies & run simultaneously independent.
- ~~switchable atomic support. true - all fails if something wrong. else - fail only dependent (can be very hard to support on front-end side, but for now seems as good feature)~~ run all requests in single transaction. (done)
- ~~use native django. we don't use complicated things that require drf for work. all can be done with "naked" django.~~ (since we validate requests with drf serializers, it's better to leave as it is).
- support files uploading (done)
Dependencies:
- Django starting from 1.9
- Django rest framework (3.6 for 1.9 django)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
drf-batch-requests-0.8.5.tar.gz
(18.7 kB
view details)
Built Distribution
File details
Details for the file drf-batch-requests-0.8.5.tar.gz
.
File metadata
- Download URL: drf-batch-requests-0.8.5.tar.gz
- Upload date:
- Size: 18.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eec4cdd47d3a92873a247807823ea17bf621ed7272ebfa4f15a4249389c22bf1 |
|
MD5 | 597454f3926cf5e6d409638df5d1d967 |
|
BLAKE2b-256 | 6dad1932ce06067a75f939f88c5d0e5435a573d0e3adcf08ecf631e22b672877 |
File details
Details for the file drf_batch_requests-0.8.5-py2-none-any.whl
.
File metadata
- Download URL: drf_batch_requests-0.8.5-py2-none-any.whl
- Upload date:
- Size: 31.3 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ba9f3f0412c046a1af65e385d8aec03dc19cb4d1b749c85d147b6dc109f4cc2b |
|
MD5 | 4e175bf5ba401d6f6c2e417cac4b1811 |
|
BLAKE2b-256 | 754d156d6a0c6a9663307a9f402d298c70752332ede5aca71ce660e626cae3ea |