Skip to main content

The Python reference implementation of BLEST (Batch-able, Lightweight, Encrypted State Transfer), an improved communication protocol for web APIs which leverages JSON, supports request batching by default, and provides a modern alternative to REST.

Project description

BLEST Python

The Python reference implementation of BLEST (Batch-able, Lightweight, Encrypted State Transfer), an improved communication protocol for web APIs which leverages JSON, supports request batching by default, and provides a modern alternative to REST. It includes examples for Django, FastAPI, and Flask.

To learn more about BLEST, please visit the website: https://blest.jhunt.dev

For a front-end implementation in React, please visit https://github.com/jhuntdev/blest-react

Features

  • Built on JSON - Reduce parsing time and overhead
  • Request Batching - Save bandwidth and reduce load times
  • Compact Payloads - Save even more bandwidth
  • Single Endpoint - Reduce complexity and facilitate introspection
  • Fully Encrypted - Improve data privacy

Installation

Install BLEST Python from PyPI.

python3 -m pip install blest

Usage

Router

The following example uses Flask, but you can find examples with other frameworks here.

from flask import Flask, make_response, request
from blest import Router

# Instantiate the Router
router = Router({ 'timeout': 1000 })

# Create some middleware (optional)
@router.before_request
async def auth_middleware(body, context):
  if context['headers']['auth'] == 'myToken':
    context['user'] = {
      # user info for example
    }
    return
  else:
    raise Exception('Unauthorized')

# Create a route controller
@router.route('greet')
async def greet_controller(body, context):
  return {
    'greeting': f"Hi, {body['name']}!"
  }

# Instantiate a Flask application
app = Flask(__name__)

# Handle BLEST requests
@app.post('/')
async def index():
  result, error = await router.handle(request.json, { 'headers': request.headers })
  if error:
    resp = make_response(error, error.status or 500)
    resp.headers['Content-Type'] = 'application/json'
  else:
    resp = make_response(result, 200)
    resp.headers['Content-Type'] = 'application/json'
    return resp

HttpClient

from blest import HttpClient

async def main():
  # Create a client
  client = HttpClient('http://localhost:8080', {
    'max_batch_size': 25,
    'buffer_delay': 10,
    'http_headers': {
      'Authorization': 'Bearer token'
    }
  })

  # Send a request
  try:
    result = await client.request('greet', { 'name': 'Steve' })
    # Do something with the result
  except Exception as error:
    # Do something in case of error

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

blest-1.0.2.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

blest-1.0.2-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file blest-1.0.2.tar.gz.

File metadata

  • Download URL: blest-1.0.2.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.6

File hashes

Hashes for blest-1.0.2.tar.gz
Algorithm Hash digest
SHA256 bebb3cc954c3042c4f7331b038d2072f87ba7b18b64fab82db7e18e98bd72926
MD5 8765d6d7385ebf0e04e509b87d98ce44
BLAKE2b-256 1da8e70f2ecd0c81d6b7c4d930f088fdfa08f7c024de3b196968cb8243f48db6

See more details on using hashes here.

File details

Details for the file blest-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: blest-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 7.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.6

File hashes

Hashes for blest-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1b925dddf007c7d67d779443c82aefa03f81a218477ba7702058b3afbf7a771c
MD5 336cbb19f86bb875ca53b44fcc40f44c
BLAKE2b-256 d478c784f7c9818c2f9c8e605e40e9bd4e77f4ddbc981eeaf24035cfffc31948

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page