template query language context body aws http amazon-web-services lambda hex aws-api-gateway

http - query - mapping templates aws



Datos modificados en AWS API Gateway Response body (1)

Estoy tratando de devolver cadena hexadecimal como respuesta de mi función AWS Lambda . Cuando llega al cliente, los datos parecen estar modificados.

  • Datos:
    47 49 46 38 39 61 01 00 01 00 80 00 00 00 00 00
    ff ff ff 21 f9 04 01 00 00 01 00 2c 00 00 00 00
    01 00 01 00 00 08 04 00 03 04 04 00 3b

  • Datos excaped hexadecimales (datos enviados):

    / x47 / x49 / x46 / x38 / x39 / x61 / x01 / x00 / x01 / x00 / x80 / x00 / x00 / x00 / x00 / x00 "" / xff / xff / xff / x21 / xf9 / x04 / x01 / x00 / x00 / x01 / x00 / x2c / x00 / x00 / x00 / x00 "" / x01 / x00 / x01 / x00 / x00 / x08 / x04 / x00 / x03 / x04 / x04 / x00 / x3b

  • Datos recibidos
    47 49 46 38 39 61 01 00 01 00 c2 80 00 00 00 00
    00 c3 bf c3 bf c3 bf 21 c3 b9 04 01 00 00 01 00
    2c 00 00 00 00 01 00 01 00 00 08 04 00 03 04 04
    00 3b

    ¿Cómo arreglar esto?


La última vez que lo revisé no fue muy explícito en el documento, pero API Gateway está hecho para json (o similar) y el soporte para binary está "en la hoja de ruta" pero claramente no parece ser una prioridad. Convierte todo lo que envía a utf-8.

Comparando precisamente sus datos originales con los recibidos, puede verlos:

47 49 46 38 39 61 01 00 01 00 80 00 00 00 00 00 ff ff ff 21 f9 04 01 00 00 01 00 2c 00 00 00 00 01 00 01 00 00 08 04 00 03 04 04 00 3b 47 49 46 38 39 61 01 00 01 00 c2 80 00 00 00 00 00 c3 bf c3 bf c3 bf 21 c3 b9 04 01 00 00 01 00 2c 00 00 00 00 01 00 01 00 00 08 04 00 03 04 04 00 3b

Todo en 0x7f está bien porque el punto de código Unicode es el mismo que el byte codificado (U + 0047 -> 47), pero para 0x80 o más surge el problema: U + 0080 -> c2 80, U + 00FF -> c3 bf y así.

Recientemente tuvimos un problema similar: los datos binarios estaban dañados y eran más grandes cuando se enviaban a través de Gateway que con acceso directo a nuestro back-end. Fue porque muchos bytes se reemplazan por el ''carácter de reemplazo'' especial de Unicode, también conocido como ''U + FFFD'', también conocido como ''0xEF 0xBF 0xBD''.

Como arreglar ? Acabamos de dejar de usar Gateway pero si puede permitirse que sus datos sean más grandes, puede basar64 para codificarlo.