Skip to main content

pylambdarest

CI/CD Status Coverage Status Latest Version PyPI - Downloads License

pylambdarest is a lightweight opinionated framework for building REST API using AWS Lambda and API Gateway.

Motivation

Why another framework ?

When using API Gateway and python Lambda functions, the most common pattern is to have a unique Lambda function triggered by a proxy API Gateway resource. The Lambda then uses a framework like Flask to do all the routing. In an API Gateway + Lambda context, I feel like the routing should be handled by API Gateway itself, then forwarding the request to specific Lambda functions for each resource or endpoint.

Features

  • No routing. Yes, this is a feature. Routing should be handled by API Gateway.
  • API Gateway event parsing (including request body and path parameters).
  • Cleaner syntax.
  • Optional body schema and query parameters validation.

Installation

Install the package from PyPI using pip:

$ pip install pylambdarest

pylambdarest should also be included in the deployment package of your Lambda functions.

Getting started

pylambdarest provides a @route decorator to parse the API Gateway event into a Request object available in the handler function as an argument. It also formats the handler's output to the expected Lambda + API Gateway format seamlessly.

Turning this:

import json

def handler(event, context):
    body = json.loads(event["body"])
    query_params = event["queryStringParameters"]
    path_params = event["pathParameters"]

    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": f"Hello from AWS Lambda {body['name']}!!"
        })
    }

Into this:

from pylambdarest import route

@route()
def handler(request):
    body = request.json
    query_params = request.query_params
    path_params = request.path_params

    return 200, {"message": f"Hello from AWS Lambda {body['name']}!!"}

You can still access the original event and context arguments from the handler:

from pylambdarest import route

@route()
def handler(request, event, context):
    print(event)
    body = request.json

    return 200, {"message": f"Hello from AWS Lambda {body['name']}!!"}

Path parameters defined in API Gateway can also be accessed directly as function argument:


api-gateway-path-params

from pylambdarest import route

@route()
def get_user(user_id):
    print(user_id)

    # get user from db
    user = {"id": user_id, "name": "John Doe"}

    return 200, user

Schema Validation

pylambdarest optionally provides schema validation using jsonschema:

from pylambdarest import route

user_schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string"}
    },
    "required": ["name"],
    "additionalProperties": False
}

@route(body_schema=user_schema)
def create_user(request):
    # If the request's body does not
    # satisfy the user_schema,
    # a 400 will be returned

    # Create user here

    return 201


query_params_schema = {
    "type": "object",
    "properties": {
        # Only string types are allowed for query parameters.
        # Types casting should be done in the handler.
        "page": {"type": "string"}
    },
    "additionalProperties": False
}

@route(query_params_schema=query_params_schema)
def get_users(request):
    page = int(request.query_params.get("page", 1))

    # request users in db
    users = [
        {"userId": i}
        for i in range((page - 1) * 50, page * 50)
    ]

    return 200, users

Example

You can look at the sample for a minimal pylambdarest API.

In this sample, we use the serverless framework to declare the API Gateway -> Lambda routing

The packaging of the Lambda functions is done using the serverless-python-requirements plugin.

Metadata

Release files for pylambdarest 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pylambdarest 0.2.1
File Size Uploaded Provenance
pylambdarest-0.2.1.tar.gz 6.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pylambdarest 0.2.1
File Interpreter ABI Platform
pylambdarest-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 13.3 kB

Release files / pylambdarest-0.2.1.tar.gz

Download URL pylambdarest-0.2.1.tar.gz
Size 6.5 kB
Tags Source
SHA-256 checksum
How to use checksums
1057a77eb7d669a625b0092cbd03f6a317757965e9739164b18bed0606ec144f
BLAKE2b-256 checksum
How to use checksums
c15b2ebd216e671a48e72b9c6255996cfb661fa288e5cdd7b70bd85c91ee6cad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.15 CPython/3.10.8 Linux/5.15.0-1022-azure

Release files / pylambdarest-0.2.1-py3-none-any.whl

Download URL pylambdarest-0.2.1-py3-none-any.whl
Size 6.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
44acfad5d240ec5b7dbf84e8ca03a1b81e4bc7d52c4f8529e5296fbdab5ace9e
BLAKE2b-256 checksum
How to use checksums
69cf35d37623512490945681ad87af5dd994bb1da339582ab3d7b86295b7c1fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.15 CPython/3.10.8 Linux/5.15.0-1022-azure

Security for pylambdarest 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page