#api-gateway #serverless #lambda

srvrls

轻量级、有观点的函数即服务框架,减少样板代码

5个版本

0.1.7 2020年4月10日
0.1.6 2020年4月7日
0.1.5 2020年4月5日
0.1.4 2020年4月5日
0.1.1 2020年4月5日

#34 in #api-gateway

自定义许可证

32KB
365

srvrls

一个轻量级的包装,用于将AWS Lambda用作API网关代理。

CodeBuild test indicator Crates.io docs


安装

Srvrls可在Crates.io或GitHub上获取。

[dependencies]
srvrls = "0.1.7"

或特定分支

[dependencies]
srvrls = { git = "https://github.com/serverlesstechnology/srvrls.git", branch = "master"}

srvrls

我们构建这个库是为了简化构建使用AWS API网关作为AWS Lambda代理的应用程序。

这个库有观点,非常可能不是你自己的。我们的设计优先级很简单

  • 减少函数即服务应用程序中的所需样板代码
  • 提供有观点的默认值来解决其他开放问题
  • 在函数即服务功能提供者和应用程序逻辑之间提供解耦(保持未来支持Google或Azure函数的选项开放)

简而言之,这个包装器将这个

impl Handler<ApiGatewayProxyRequest, ApiGatewayProxyResponse, HandlerError> for App {
    fn run(&mut self, event: ApiGatewayProxyRequest, _ctx: Context) -> Result<ApiGatewayProxyResponse, HandlerError> {
        match some_function(event) {
            Ok(response) => {
                ApiGatewayProxyResponse {
                    status_code: 200,
                    headers: hashmap!(String::from("Content-Type") => String::from("application/json")),
                    multi_value_headers: HashMap::new(),
                    body: Some(response),
                    is_base64_encoded: None,
                }
            }, 
            Err(e) => {
                ApiGatewayProxyResponse {
                    status_code: 400,
                    headers: hashmap!(String::from("Content-Type") => String::from("application/json")),
                    multi_value_headers: HashMap::new(),
                    body: Some(e.message),
                    is_base64_encoded: None,
                }
            }
        }
    }
}

变成这个

impl SrvrlsApplication for App {
    fn handle(&mut self, event: SrvrlsRequest) -> Result<SrvrlsResponse, SrvrlsError> {
        let response = some_function(event)?;
        Ok(SrvrlsResponse::ok(response))
    }
}

依赖关系

~19MB
~369K SLoC