Giter Site home page Giter Site logo

Add binary support about aegis HOT 4 CLOSED

tmaiaroto avatar tmaiaroto commented on June 13, 2024
Add binary support

from aegis.

Comments (4)

tmaiaroto avatar tmaiaroto commented on June 13, 2024

This is partially implemented. The media type wildcard */* will now be added to the API (and set on each update). So it's possible to return a file, render an image, etc. Cool!

But...I would still like to allow the value to be configured. While I can't see a problem with simply always keeping a wildcard of */* set (and maybe just do so when the API is first created) and be done with it...I imagine it could be useful to specify the types in the configuration.

Unfortunately, setting the array of media types did not seem to work with Swagger. Which would have made this all easier. So an update API call had to be made...And that call requires a path which is a little funky (and escaped): /binaryMediaTypes/*~1*

Anyway, this could be a bit nicer...And I haven't yet addressed binary coming in. It is possible to accept binary data through API Gateway too. It will then be converted to base64. In fact, on the Lambda side it's always going to be base64 because the Lambda event is of course in JSON.

For now, to return binary data, simply set res.IsBase64Encoded = true and then base64 encode some binary data: res.Body = base64.StdEncoding.EncodeToString(buf.Bytes()) ... I have had success in returning an image and making a simple image resize API with just a few lines of code.

Binary support with API Gateway and Lambda is really cool and convenient. However, for many situations I'd probably look at working with S3 and CloudFront. Specifically with an image resize API, you'd want to keep the results cached and stored somewhere like S3/CloudFront. Of course API Gateway can cache responses...But to scale (even if perhaps only your wallet), you're really looking at S3 anyway. At any rate, binary support is super convenient.

from aegis.

tmaiaroto avatar tmaiaroto commented on June 13, 2024

It may not be possible to accept images when using Lambda Proxy? https://aws.amazon.com/blogs/compute/binary-support-for-api-integrations-with-amazon-api-gateway/

...Or may be that specific routes need contentHandling settings:
http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings.html

Which might not work so well with a wildcard path.

from aegis.

tmaiaroto avatar tmaiaroto commented on June 13, 2024

I followed this: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-configure-with-control-service-api.html#api-gateway-payload-encodings-setup-with-api-set-integration-request-encoding

It doesn't seem to work just yet. I'm uncertain it will work for Lambda Proxy with ANY requests. In order to be sure, I'll need to change the API Gateway settings to use something else other than Lambda Proxy. Though this starts to remove a lot of convenience.

from aegis.

tmaiaroto avatar tmaiaroto commented on June 13, 2024

Not going to worry about this for now as it's not well suited for AWS Lambda and API Gateway. The preferred method of working with binary data is to upload with pre-signed S3 URLs and then respond with S3 URLs. Though we can also return binary data in responses from API Gateway. So I don't see the need for anything more extravagant. Not for now.

from aegis.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.