Бессерверный API-шлюз, преобразовывающий запрос в base64 - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть безсерверное приложение, которое загружает файлы в s3 (через запрос POST) и обслуживает их (через запрос GET)

Я использую плагины serverless-apigw-binary и serverless-apigwy-binary, чтобы позволить мне возвращать двоичные данныев форме изображения.Чтобы позволить URL работать с браузерами, я должен установить двоичные типы на */*.

Для загрузки изображения конечная точка POST принимает тело вроде {"base64": "..."}.Однако с этой конфигурацией все тело проходит как строка в кодировке base64.Как я могу предотвратить преобразование тела запроса с application/json?

См. serverless.yml ниже:

service: image-service

custom:
  envName: ${opt:stage, self:provider.stage}
  domains:
    prod: api.<mydomain>
    dev: dev-api.<mydomain>
  customDomain:
    basePath: images
    domainName: ${self:custom.domains.${self:custom.envName}}
    certificateName: "*.<mydomain>"
  apigwBinary:
    types:
      - '*/*'

provider:
  name: aws
  runtime: nodejs8.10
  region: eu-west-1
  memorySize: 1536

  role: ImageRenderingRole

  environment:
    ENV_NAME: ${self:custom.envName}
    APP_NAME: image-service
    BUCKET: <mybucket>

plugins:
  - serverless-offline
  - serverless-domain-manager
  - serverless-apigw-binary
  - serverless-apigwy-binary

functions:
 uploadImage:
   handler: handler.uploadImage
   events:
     - http:
      path: /
      method: POST

  getImage:
    handler: handler.getImage
    events:
      - http:
          path: 'images/{idAndFormat}'
          method: get
          contentHandling: CONVERT_TO_BINARY
          parameters:
              paths:
                idAndFormat: true

1 Ответ

0 голосов
/ 26 сентября 2018

У вас есть два варианта:

  1. Прекратить использование */* в качестве селектора типа.Это обрабатывает все как двоичный код и, следовательно, все кодирует base64.К сожалению, вы не можете выразить исключение из правила, только то, что следует правилу.Вы можете добавить исчерпывающий список типов, которые должны рассматриваться как двоичные, но это звучит хрупко для меня.

  2. Просто примите JSON base64 и де-base64 его на другой стороне.Это кажется самым простым.Похоже, вы используете узел, и по этому поводу есть множество учебных пособий.Конечно, это добавляет некоторые шаги и немного раздувается, но давайте будем честными, вы используете API Gateway и Lambda (которые являются хорошими инструментами, но ...), поэтому очевидно, что производительность здесь не должна настраиваться на миллисекунду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...