2016-03-24 2 views
1

Какой HTTP-заголовок следует использовать для указания стилистических свойств ответа HTTP, в частности, в случае ключей в объекте JSON? Примечание. Я разрабатываю REST API, где я бы хотел, чтобы клиенты предоставили ожидаемый случай, например camelCase или snake_case.HTTP-заголовок для указания требуемого стилистического свойства для тела ответа

Когда camelCase задан ответ будет выглядеть следующим образом:

{ 
    "peopleUrl": "…", 
    "postsUrl": "…" 
} 

Когда snake_case задан ответ будет выглядеть следующим образом:

{ 
    "people_url": "…", 
    "posts_url": "…" 
} 

заголовкам Я смотрел на являются Expect и Prefer , Expect описывается как обязательная конфигурация, которую сервер должен соблюдать или ошибка, а Prefer описывается как необязательная конфигурация. Конкретный синтаксис я смотрел на это:

Expect: case=camel 

или:

Prefer: case=camel 

В настоящее время, я чувствую, как Expect лучше, потому что он требует настройки. Однако, хотя в RFC 2616 предусмотрен механизм расширения для Expect, однако в RFC 7231 этот механизм расширения был удален, и разрешено только поле 100-continue (перейдите на следующую страницу, чтобы увидеть примечание, предоставляющее ордер). Заголовок Prefer был указан в RFC 7240, а -, как представляется, имеет механизм расширения.

Какой заголовок лучше всего подходит для этой конфигурации? Я смотрю в неправильном направлении с Expect и Prefer?

+0

_ «Я бы хотел, чтобы клиенты предоставили ожидаемый случай» _ - ** почему? ** Просто запишите один корпус, и пусть ваши клиенты придерживаются этого ...В любом случае, как вы можете прочитать в RFC 7240, вам нужно будет зарегистрировать расширения 'Prefer' с IANA. – CodeCaster

+0

Если у вас есть API, который должен обслуживать данные на нескольких разных платформах, полезно разрешить им выбирать, какой формат они хотят. Клиент JS может захотеть 'camelCase', тогда как PHP-клиент может захотеть' snake_case'. Даже если это плохая идея, поиск подходящего заголовка остается актуальным вопросом. – Calebmer

+0

Вы поставщик услуг, вы определяете формат. Я не говорю, что это неверный вопрос, просто глупый. Не забывайте о накладных расходах, которые могут возникнуть на вашей стороне. Во всяком случае, нет существующего заголовка, который вы можете использовать для этого. – CodeCaster

ответ

1

Как видно из некоторых комментариев, вероятно, не существует существующего заголовка HTTP-заголовка, определенного в HTTP RFC, который будет охватывать/обрабатывать ваш прецедент. Использование Expect или Prefer, с четко определенной семантикой, которая не совсем покрывает ваши потребности, может привести к болью/расстройству, чем вам хотелось бы; эти заголовки могут обрабатываться специально существующими клиентами, серверами и прокси-серверами способами, которые вы не хотите/ожидаете.

Тем не менее, есть ничто не мешает вам использовать свой собственный пользовательский заголовок X- для запросов и ответов, напримерX-JSON-KeyStyle:

GET /path/to/resource HTTP/1.1 
Host: ... 
X-JSON-KeyStyle: camel 
... 

И тогда ваш ответ будет указывать стиль, используемый в возвращаемых данных:

HTTP1/1 200 OK 
... 
X-JSON-KeyStyle: camel 
... 

По спецификации, любые имена заголовков предваряется X- намеренно не обрабатываются/покрыты, и для использует это. Таким образом, при таком подходе вам понадобится только документировать свой собственный HTTP-заголовок для использования клиентами вашего REST API.

Надеюсь, это поможет!

Смежные вопросы