#json #amazon-web-services #aws-api-gateway
#json #amazon-web-services #aws-api-gateway
Вопрос:
Я столкнулся с «application / x-amz-json-1.1» при отправке запросов к ресурсам AWS. Совсем недавно возникла проблема, связанная с тем, что API-шлюзу, с которым я общался, не нравилось обрабатывать его (по какой-либо причине). Это заставило меня задуматься, в чем преимущество использования application / x-amz-json-1.1 вместо application / json для моих запросов. И, к моему разочарованию, в AWS, похоже, нет никакой документации по этому странному типу контента.
Итак, я перехожу к SO: что такое «application / x-amz-json» и чем оно отличается от «application / json»?
Комментарии:
1. У меня тот же вопрос.
2. отсюда docs.aws.amazon.com/translate/latest/dg/API_Reference.html похоже, что ‘application/x-amz-json-1.1’ ——> Указывает, что содержимое запроса является JSON. Также указывается версия JSON. Это совсем другое.
Ответ №1:
Amazon конкретно не документирует, для чего application/x-amz-json
предназначен Content-Type, однако на Smithy (языке с открытым исходным кодом для определения сервисов и SDK, опубликованном AWS) есть документация по протоколу:
Учитывая, что вопрос касается разницы при использовании в качестве заголовка Content-Type
1 для отправки запросов, я думаю, мы можем сказать, что разница в:
application/json
запрашивать / получать данные JSON без чего-либо более конкретногоapplication/x-amz-json-1.1
(или другая версия) также запрашивает / получает данные JSON и ожидает дополнительных действий, описанных в документах выше. (т.Е. Сообщите серверу / клиенту, что это JSON плюс дополнительные элементы)
Я думаю application/x-amz-json
, его можно рассматривать как своего рода расширение или более конкретный способ выполнения application/json
запросов.
проблемой стало то, что API-шлюзу, с которым я общался, не понравилось обрабатывать его (по какой-либо причине)
В конкретном случае создания запросов PATCH, PUT и POST к AWS Amazon API Gateway, Content-Type
по-видимому, требуется указать заголовок application/x-amz-json-1.1
или другую версию. Согласно соответствующим документам:
Тип содержимого (условный)
Указывает JSON и версию, например, Content-Type: application/x-amz-json-1.0.
Условие: требуется для запросов PATCH, PUT и POST.
Возможно, сервер понимает application/json
как базовый JSON, но требует application/x-amz-json-1.1
выполнения определенных запросов.
1 Content-Tye
заголовок используется для указания серверу / клиенту, как обработать наш запрос
Комментарии:
1.Интересно, что есть 2 aws api gw, которые вызывает мой проект, один из них принимает
application/x-amz-json-1.0
(я не пробовал другие), в то время как другой требуетapplication/json
и терпит неудачу сx-amz...
🤷2. бит «требуется для публикации» так легко неправильно истолковать… Я думал, что Пьер имел в виду, что
x-amz...
это требуется при отправке запросов POST к API GW; в то время как на самом деле (?) это только то, что полеContent-Type
заголовка запроса требуется для запросов, которые имеют тело (PATCH / PUT / POST), в то время как значение поля не является обязательным.3. Вы не ошибаетесь, я переформулировал, чтобы прояснить это.