При написании функции для AWS Lambda (в Java / Scala) функция-обработчик может иметь одну из разных подписей:
// Raw input / output
def handleRequest(is: InputStream): OutputStream = ???
// Using the AWS dependency
def handleRequest(input: APIGatewayProxyRequestEvent, context: Context): APIGatewayProxyResponseEvent = ???
Это, по крайней мере, две возможные сигнатуры, которые мне известны.Возможно, есть и другие.
Разница в том, что первый ответ представляет собой необработанный ответ, который должен быть упакован в ответ REST шлюзом API с настроенными вручную свойствами, такими как тип носителя и код ответа.
Второй ответ, похоже, использует лямбда-прокси-интеграцию и извлечет всю конфигурацию из APIGatewayProxyResponse
.
Теперь по моему вопросу:
Поле body
из APIGatewayProxyResponse
относится к типу String
.Мне кажется, что этот POJO сериализуется в JSON перед отправкой в шлюз API.Это сделало бы невозможным обслуживание двоичных данных, таких как изображения или файлы PDF.
Необработанный OutputStream
не может содержать информацию о заголовках и т. Д. (Или может?), Что означает, что я не могу обслуживать несколько различных типов носителей.
Конечно, я мог бы конвертировать изображения, например, в Base64.Но это далеко не оптимально.
Есть ли способ, которым я могу обслуживать разные (двоичные и недвоичные) типы мультимедиа (с правильными заголовками и т. Д.) В одном обработчике лямбды AWS?Как мне настроить шлюз API для этого?