Lambda Annotations API Routing
- Dominant language
- C#
- Stars
- 1.7k
- Forks
- 503
- Avg merge
- 1d 5h
- Merged PRs (30d)
- 18
Description
### Describe the feature
With the release of the `[LambdaGlobalProperties]` attribute that can auto-generate the `static Main()` method for non managed and native AOT runtimes this functionality could be extended to provide API routing capabilities. The API annotations on methods could be used as part of a switch statement for the inbound API event.
### Use Case
Running a simple web API on Lambda without needing to introduce the overhead of ASP.NET. Removes the need to set the `ANNOTATIONS_HANDLER` environment variable when running multiple API endpoints in the same Lambda function.
Allows the use of an API Gateway `{proxy+}` route with all API request routing to the same Lambda function.
### Proposed Solution
The `GenerateMain` global properties attribute adds a switch statement based on an environment variable. Introduce a new `ApiRouting` Lambda Global Property that will generate the `static Main` method. Include a switch statement that uses a combination of the `HttpMethod` and `Path` from the incoming API event to route to the correct method.
Example of generated code:
```c#
public static async Task Main(string[] args)
{
Func> apiHandler = Handler;
await Amazon.Lambda.RuntimeSupport.LambdaBootstrapBuilder.Create(apiHandler, new Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer()).Build().RunAsync();
}
public async static Task Handler(APIGatewayProxyRequest request)
{
switch ($"{request.HttpMethod.ToUpper()} {request.Path.ToUpper()}")
{
case "GET /products":
return GetProductsHandler();
default:
return new APIGatewayProxyResponse()
{
StatusCode = 404
};
}
}
```
### Other Information
_No response_
### Acknowledgements
- [X] I may be able to implement this feature request
- [ ] This feature might incur a breaking change
### AWS .NET SDK and/or Package version used
Amazon.Lambda.Annotations
### Targeted .NET Platform
.NET 6, .NET 8
### Operating System and version
All
Contributor guide
Assessment
This issue has not been assessed yet.