Skip to main content

restful-aws-lambda

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

restful-aws-lambda 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.
  • Customizable JSON dumps behavior
  • No schema validation

Installation

Install the package from PyPI using pip:

$ pip install restful-aws-lambda

restful-aws-lambda should also be included in the deployment package of your Lambda functions.

Getting started

restful-aws-lambda 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 restful_aws_lambda 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 restful_aws_lambda 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 restful_aws_lambda 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

JSON dumps options

restful-aws-lambda uses the default json library to dump the lambda handler response. You can customize the behavior of it by passing json.dumps() keyword arguments to the json= parameter:

import json
import datetime
from restful_aws_lambda import route

class JSONDatetimeEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, (datetime.date, datetime.datetime)):
            return obj.isoformat()

        return super(JSONDatetimeEncoder, self).default(obj)


@route(json={"cls": JSONDatetimeEncoder})
def lambda_handler(request):
    today = datetime.date.today()
    return 200, {"today": today}

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 restful-aws-lambda 0.1.2

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

Source distribution (sdist)

Source distribution for restful-aws-lambda 0.1.2
File Size Uploaded Provenance Actions
restful_aws_lambda-0.1.2.tar.gz 6.1 kB Without provenance Details for restful_aws_lambda-0.1.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for restful-aws-lambda 0.1.2
File Interpreter ABI Platform Actions
restful_aws_lambda-0.1.2-py3-none-any.whl Python 3 none any Details for restful_aws_lambda-0.1.2-py3-none-any.whl

Total release size: 13.0 kB

Release files / restful_aws_lambda-0.1.2.tar.gz

Download URL restful_aws_lambda-0.1.2.tar.gz
Size 6.1 kB
Tags Source
SHA-256 checksum
How to use checksums
23c3c0561187146eb621096f5305cd046703eb09fb4371270763b48cf36d8ff6
BLAKE2b-256 checksum
How to use checksums
26997b1cd48efcb1862017ef91b3b8693b8c44946f540af604e63e3aa487a3ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.1 CPython/3.11.1 Linux/5.19.0-26-generic

Release files / restful_aws_lambda-0.1.2-py3-none-any.whl

Download URL restful_aws_lambda-0.1.2-py3-none-any.whl
Size 6.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3e8439528e745874278c093e2277bfba6755ee16c06acee65f51773f93d8b80c
BLAKE2b-256 checksum
How to use checksums
8e3a3fd7ff925f37077928e7ab14e3eb743d850acba51bae80b6ddf48a14e8bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.1 CPython/3.11.1 Linux/5.19.0-26-generic

Security for restful-aws-lambda 0.1.2

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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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