Согласование контента и расширенные типы мультимедиа

Некоторые типы носителей являются расширениями других типов носителей. Такие типы носителей часто используют + в своем имени, чтобы сигнализировать об этом. Например, application/atom+xml расширяет общий xml, а application/hal+json расширяет универсальный json.

Мой вопрос: что делать, если клиент запрашивает общий тип мультимедиа, а сервер хочет ответить одним из расширенных типов мультимедиа? Например, если запрос имеет заголовок Accept: application/json и сервер хочет ответить application/hal+json, должен ли сервер...

  1. ... доставить обычный JSON с Content-type: application/json, т.е. не включать _links или _embedded? Это то, что просил клиент, и это то, что он получает. Если вам нужен HAL, попросите об этом.

  2. ... доставить представление HAL с помощью Content-type: application/json? HAL, в конце концов, это JSON, и это то, о чем просил клиент. Клиент счастлив и может игнорировать биты, которые он не понимает.

  3. ... доставить представление HAL с помощью Content-type: application/hal+json? Как и 2., клиент получает то, что хочет, и может игнорировать биты, которые он не понимает. Но есть также ключ к тому, что клиент может получить больше от представления.

Я предпочитаю 3. Но есть ли спецификация, передовая практика или общепринятый подход, которые могут дать рекомендации по выбору лучшего?


person biscuit314    schedule 21.09.2014    source источник


Ответы (1)