Мне интересно, использовать ли матрицу или параметры запроса в моих URL. Я нашел старое обсуждение этой темы не удовлетворяющим.
Примеры
- URL с параметрами запроса: http: //some.where/thing? ParamA = 1 & paramB = 6542
- URL с матричными параметрами: http: //some.where/thing; paramA = 1; paramB = 6542
На первый взгляд, матричные параметры имеют только преимущества:
- более читаемый
- не требуется кодирование и декодирование «&» в XML-документах
- URL с "?" не кэшируются во многих случаях; URL-адреса с матричными параметрами кэшируются
- Параметры матрицы могут появляться повсюду в пути и не ограничиваются его концом.
- Параметры матрицы могут иметь более одного значения:
paramA=val1,val2
Но есть и недостатки:
- только несколько платформ, таких как JAX-RS, поддерживают параметры матрицы
- Когда браузер отправляет форму через GET, параметры становятся параметрами запроса. Таким образом, это заканчивается двумя типами параметров для одной и той же задачи. Чтобы не запутывать пользователей сервисов REST и ограничивать усилия разработчиков сервисов, было бы проще всегда использовать параметры запроса - в этой области.
Поскольку разработчик службы может выбрать среду с поддержкой матричных параметров, единственным оставшимся недостатком будет то, что браузеры создают параметры запроса по умолчанию.
Есть ли другие недостатки? Что бы вы сделали?
Ответы:
Важным отличием является то, что параметры матрицы применяются к конкретному элементу пути, а параметры запроса применяются к запросу в целом. Это вступает в игру при создании сложного запроса в стиле REST для нескольких уровней ресурсов и подресурсов:
Это действительно сводится к пространству имен.
Примечание: «уровни» ресурсов здесь
categories
иobjects
.Если бы для многоуровневого URL использовались только параметры запроса, вы бы получили
Таким образом, вы также потеряете ясность, добавленную локальностью параметров в запросе. Кроме того, при использовании инфраструктуры, такой как JAX-RS, все параметры запроса будут отображаться в каждом обработчике ресурсов, что приведет к потенциальным конфликтам и путанице.
Если ваш запрос имеет только один «уровень», тогда разница не так уж важна, и два типа параметров эффективно взаимозаменяемы, однако параметры запроса обычно лучше поддерживаются и более широко распознаются. В общем, я бы рекомендовал вам придерживаться параметров запроса для таких вещей, как формы HTML и простые одноуровневые HTTP API.
источник
/?
часть представляет ресурс??
Начинается параметр запроса часть запроса. Параметры запроса являются наиболее распространенным типом параметров URL, в отличие от параметров матрицы. Косая черта перед знаком вопроса гарантирует, что параметр запросаpage
не попадает в параметр матрицы, предшествующий косой черте. Я полагаю, что если бы к матрице не были подключены параметрыcategories
, параметры запроса можно было быhttp://example.com/res/categories?page=1
В дополнение к ответу Тима Сильвестра я хотел бы привести пример того, как параметры матрицы могут обрабатываться с помощью JAX-RS .
Параметры матрицы в последнем элементе ресурса
Вы можете получить к ним доступ, используя
@MatrixParam
аннотациюотклик
Но, как говорится в Javadoc
... что подводит нас к пункту 2
Параметры матрицы в середине URL
Вы можете получить доступ к параметрам матрицы в любом месте, используя переменные пути и
@PathParam
PathSegment
.отклик
Поскольку параметры матрицы предоставляются как,
MultivaluedMap
вы можете получить доступ к каждому изили если вам нужен только первый
Получить все параметры матрицы как один параметр метода
Используйте,
List<PathSegment>
чтобы получить их всеотклик
источник
- Слишком важно быть отправленным в раздел комментариев .--
Я не уверен, в чём дело с матричными URL. Согласно статье о дизайне w3c, написанной TBL, это была просто идея дизайна, в которой прямо говорится, что она не является особенностью сети. Такие вещи, как относительные URL-адреса, не используются при его использовании. Если вы хотите использовать это, это нормально; просто нет стандартного способа его использования, потому что это не стандарт. - Стив Померой
Итак, короткий ответ: если вам нужен RS для бизнес-целей, вам лучше использовать параметр запроса.
источник