Skip to content
This repository has been archived by the owner on Apr 9, 2021. It is now read-only.
/ flask-aggregator Public archive

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

License

Notifications You must be signed in to change notification settings

ramnes/flask-aggregator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flask-Aggregator

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:

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

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

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

Why?

Mobile networks.

How to install?

$ pip install flask-aggregator

How to setup my application?

from flask import Flask
from flask_aggregator import Aggregator

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

How to aggregate?

$ 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

About

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

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages