Что такое «application / x-amz-json» и чем оно отличается от «application / json»?

#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. Вы не ошибаетесь, я переформулировал, чтобы прояснить это.