Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ramnes/flask-aggregator

:fast_forward: Batch the GET requests to your REST API into a single POST
https://github.com/ramnes/flask-aggregator

api flask flask-extensions http mobile-first python rest

Last synced: about 2 months ago
JSON representation

:fast_forward: Batch the GET requests to your REST API into a single POST

Awesome Lists containing this project

README

        

Flask-Aggregator
================

.. image:: https://img.shields.io/pypi/v/flask-aggregator.svg

Batch the GET requests to your API into a single POST. Save requests latency and
reduce REST chatiness.

I was inspired by `this article
`_
from 3scale, and by `their NGINX aggregator
`_ - but I wanted something simpler.

What does it do?
----------------

Flask-Aggregator adds an endpoint to your Flask application that handles
multiple GET requests in a single POST, and returns the response of each GET
request in a JSON stream.

What does that mean?
--------------------

It means that instead of sending multiple GET requests:

.. code-block:: sh

-> GET /route1
<- answer1
-> GET /route2
<- answer2
-> GET /route3
<- answer3

You can now just send a single POST that aggregates them all:

.. code-block:: sh

-> POST /aggregate ["/route1", "/route2", "/route3"]
<- {
"/route1": answer1,
<- "/route2": answer2,
<- "/route3": answer3
}

Why?
----

Mobile networks.

How to install?
---------------

.. code-block:: sh

$ pip install flask-aggregator

How to setup my application?
----------------------------

.. code-block:: python

from flask import Flask
from flask_aggregator import Aggregator

app = Flask(__name__)
Aggregator(app=app, endpoint="/batch")

How to aggregate?
-----------------

.. code-block:: sh

$ python example.py
[go to another shell]
$ curl -H "Content-type: application/json" -X POST 127.0.0.1:5000/batch \
--data-raw '["/hello/world", "/hello/ramnes?question=Sup?"]'
{
"/hello/world": "Hello, world!",
"/hello/ramnes?question=Sup?": "Hello, ramnes! Sup?"
}

Is it ready for production yet?
-------------------------------

Not really.

As of today, Flask-Aggregator executes the aggregated requests in a
synchronous manner, which makes it only useful if latency is a real issue and
response time is not, and that more than N requests are sent at the same time,
where N is maximum number of concurrent requests on user's client.

Also, it has limitations such has:

* no automatic caching mechanism browser-side, since it uses a POST request
* no header support at all for now, which means no cookie, etag, or whatever
* no other HTTP verb than GET is supported for now

Last but not least, chances are high that a lot of corner cases are not handled.

License
-------

MIT