Lightweight framework for building REST API using AWS Lambda + API Gateway
Project description
restful-aws-lambda
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:
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.
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 restful_aws_lambda-0.1.2.tar.gz
.
File metadata
- Download URL: restful_aws_lambda-0.1.2.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.1 CPython/3.11.1 Linux/5.19.0-26-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 23c3c0561187146eb621096f5305cd046703eb09fb4371270763b48cf36d8ff6 |
|
MD5 | f6ee4a0da6122f1f24ef04892b77a414 |
|
BLAKE2b-256 | 26997b1cd48efcb1862017ef91b3b8693b8c44946f540af604e63e3aa487a3ad |
File details
Details for the file restful_aws_lambda-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: restful_aws_lambda-0.1.2-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.1 CPython/3.11.1 Linux/5.19.0-26-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3e8439528e745874278c093e2277bfba6755ee16c06acee65f51773f93d8b80c |
|
MD5 | 9d8ff41596919f00d0b128761d224c0e |
|
BLAKE2b-256 | 8e3a3fd7ff925f37077928e7ab14e3eb743d850acba51bae80b6ddf48a14e8bc |