Лучшие практики для разделителей в пути HTTP URL - PullRequest
6 голосов
/ 20 августа 2011

Было бы неразумно использовать различные знаки пунктуации в пути URL-адреса HTTP?Я нахожусь в процессе определения URL ресурсов для API.Эти URL ресурсов должны быть доступны, сохранены и переданы широким спектром клиентов и промежуточного программного обеспечения, поэтому важно, чтобы они не содержали символов, которые могут вызвать проблемы.

RFC 3986, раздел 2.2.«Зарезервированные символы» определяет следующие символы в качестве подэлементов:! $ & '() * +,; =

Являются ли какие-либо из них недопустимыми для произвольного использования в путях URL в схеме HTTP?

Даже если они являются законными в соответствии со стандартами, имеют ли какие-либо из них высокую вероятность возникновения проблем с совместимостью в реальных условиях из-за несовместимого программного обеспечения?

Существуют ли какие-либо конкретные подэлементычто вы ранее без проблем использовали в широко развернутом API (это послужило бы доказательством того, что те, что вы использовали, безопасны)?

Мотивация заключается в том, что нам необходимо разделить пары ключ-значение, которые не имеют иерархическойсемантика.Мы рассматриваем возможность сделать это: http://doriantaylor.com/policy/http-url-path-parameter-syntax.Однако, если это может быть проблемой, мы просто сделаем http://example.com/key1/value1/key2/value2

спасибо

1 Ответ

0 голосов
/ 24 августа 2011

Каким бы ни был ваш путь, будьте уверены в этом;изменение API может быть проблематичным, даже если указана версия. плохая идея иметь несколько местоположений для одного и того же ресурса - должно быть одно каноническое местоположение.Хотя теоретически вы можете использовать перенаправление HTTP 301, если вас беспокоит совместимость, лучше избегать этого.

Схема множеств Дориана Тейлора выглядит разумной (и полностью законной) и не должна вызывать проблем совместимости с любой системойили любой, который не сильно глючит).

Если ваш URL нужно использовать в качестве параметра в новом URL, то прямая косая черта и равные должны быть кодированы процентов , но этоЗначение true для стандартной строки запроса (?&=) и предложенной альтернативы, а также для ://, если включен протокол.Очевидно, что если вы хотите использовать ;,= в своих значениях, вам нужно будет их кодировать.

Единственная возможная проблема, которую я вижу, - это если ваши URL-адреса хранятся в CSV, но библиотеки CSV распространены и цитируютсяспециальные символы четко определены.

...