Параметры запроса URL или параметры типа мультимедиа (в заголовке Accept) для настройки ответа на HTTP-запрос?

Я работаю над разработкой REST API, который может отвечать в различных форматах, один из которых является обычным текстовым форматом, который можно настроить для отображения или скрытия определенных аспектов ответа (например, заголовков разделов или сносок Традиционно это делается с помощью параметров URL-запроса, как для указания желаемого типа ответа, так и для параметров конфигурации, например:

http://api.example.com/foo-book/ch1/?format=text&headings=false&footnotes=true

Однако более элегантный способ RESTful указать желаемый тип ответа (вместо format = text параметр запроса URL) должен использовать Accept he ader, например:

Accept: text/plain; charset=utf-8

Теперь, в дополнение к URL-адресам, типы мультимедиа могут принимать параметры согласно RFC 2046 и, как видно из повсеместного text / html; charset = utf-8 и в Принять заголовки , например audio / *; q = 0,2 . Также показано , что поставщик-созданные типы MIME могут определять свои собственные параметры, например:

application/vnd.example-com.foo+json; version=1.0
application/vnd.example-info.bar+xml; version=2.0

Итак, для ранее зарегистрированных типов MIME, таких как text / html или application / json , допустимо ли включать настраиваемые параметры для потребности приложения? Например:

Accept: text/plain; charset=utf-8; headings=false; footnotes=true

Это кажется элегантным решением RESTful, но также кажется, что оно что-то нарушает. RFC 2046 §1 гласит:

Parameters are modifiers of the media subtype, and as such do not
fundamentally affect the nature of the content.  The set of
meaningful parameters depends on the media type and subtype.  Most
parameters are associated with a single specific subtype.  However, a
given top-level media type may define parameters which are applicable
to any subtype of that type.  Parameters may be required by their
defining media type or subtype or they may be optional.  MIME
implementations must also ignore any parameters whose names they do
not recognize.

Обратите внимание на последнее предложение:

MIME implementations must also ignore any parameters whose names they do not recognize.

Означает ли это, что клиент не соответствует требованиям, если он распознает параметр footnotes = true в параметре текст / простой тип носителя?

16
задан Weston Ruter 15 July 2011 в 06:40
поделиться