A set of utilities to build API gateway.
Project description
Usage: Define Command
Command represents an external operation. To define a command, you must inherit from blackgate.Command.
Example:
from blackgate import Command class GetCurrentUser(Command): group_key = 'service.session' command_key = 'get_current_user' def __init__(self, cookie): self.cookie = cookie def run(self): resp = requests.get('http://session-service/session', headers={'Cookie': self.cookie}, timeout=1) return resp.json()['user_id'] def fallback(self): return None
Usage: Synchronous Execution
You can contruct command with parameters and then execute it:
get_current_user = GetCurrentUser(cookie='session=78b29404-92c9-49db-b87b-531b5f9cfc56') user_id = get_current_user.execute()
Usage: Asynchronous Execution
You can execute a Command asynchronously by using the queue() method, as in the following example:
@tornado.gen.coroutine def some_function(): get_current_user = GetCurrentUser(cookie='session=78b29404-92c9-49db-b87b-531b5f9cfc56') user_id = yield get_current_user.queue() print(user_id)
Usage: Fallback
Usage: Proxy
Configure Blackgate Component:
from blackgate import component component.add('executor_pool', {'group_key': 'api.v1', 'max_workers': 10}) component.install() app = tornado.web.Application([ (r'/api/v1/(.*)', HTTPProxy, dict(command=APIV1Command)), ]) app.listen(8888) tornado.ioloop.IOLoop.current().start()
Route User Request to Inner Service:
from blackgate import HTTPProxyCommand class APIService(HTTPProxyCommand): group_key = 'api.v1' command_key = 'proxy_v1_traffic' def before_request(self): path = self.request['path'].replace('/api', '') self.request['url'] = 'http://intra.service.com' + path def fallback(self): return dict( status_code=500, reason='Internal Server Error', headers={}, content=json.dumps({ 'code': 500, 'message': 'internal server error', 'error': {} }) )
ThreadExecutorPool
Executor Pool is the place where you can run external network calls.
Each command defines its group_key. You must register an executor_pool for specific group_key:
from blackgate import component component.add('executor_pool', {'group_key': 'service.session', 'max_workers', 10}) # ... component.install()
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
Built Distribution
File details
Details for the file blackgate-0.2.3.tar.gz
.
File metadata
- Download URL: blackgate-0.2.3.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 707acec2a3223db917c7372054717eda6e8f929489450b6193366512a41536a9 |
|
MD5 | 18c949edb5feeea595093de55f2c2a2d |
|
BLAKE2b-256 | 0a59a925c8989bca87d7e9616c71f0d6f13e245a3692c255a350368b8153ee1a |
File details
Details for the file blackgate-0.2.3-py2.py3-none-any.whl
.
File metadata
- Download URL: blackgate-0.2.3-py2.py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb1ee582e0b1facc481afd6989c3fa2bc657248dbee0367a58787a7c957a4822 |
|
MD5 | 109ed620321a30d8d5a251ce807e3160 |
|
BLAKE2b-256 | 2e0509c20e80e44468fdae70598170e1fd7b93b359f75d70d8947b4da48b860c |