Подтвердить что ты не робот

Услуги Java RESTful. В чем разница между QueryParam и PathParam с точки зрения их использования?

В чем разница между QueryParam и PathParam с точки зрения их использования?

Я понимаю, что данные могут быть переданы службе, используя оба из них. PathParam - это данные предшествующие? в URL и QueryParam - данные значения имени после?. Но мне интересно, как именно они используются.

4b9b3361

Ответ 1

На практике, вероятно, нет ни одного правильного ответа на этот вопрос, так как существует множество различных схем URL-адресов при использовании в "дикой природе". Однако полезный способ взглянуть на это будет с точки зрения обработки URL REST. В REST (REpresentational State Transfer) идея состоит в том, чтобы иметь возможность однозначно идентифицировать каждый ресурс, к которому вы хотите предоставить доступ. В общей схеме REST часть пути URL-адреса можно рассматривать как набор координат в N-пространстве (т.е. X, y, z = > //myApp/x/y/z), а параметры запроса дополнительные спецификаторы. Эти дополнительные спецификаторы могут использоваться в качестве критериев поиска для неполных спецификаций пути, чтобы вернуть список соответствующих ресурсов.

Подробнее о URL-адресах REST см. следующий вопрос.

EDIT: @marcok имеет хороший технический ответ, но, поскольку ваш обновленный комментарий разоблачен, вам кажется более интересным, когда выбирать один над другим. Как правило, если вы собираетесь создавать "чистый" RESTful API, все, что является частью пути, должно однозначно идентифицировать ресурсы по их идентичности. Зачастую это может привести к тому, что ваш URL-адрес заканчивается значением ID как частью пути к уникальной идентификации ресурса.

Однако, если ваш API напрямую раскрывает возможность поиска/фильтрации по атрибутам (возможно, исключая идентификаторы), вы с большей вероятностью кодируете это как параметр запроса.

Это просто примеры, и есть разные мнения о том, что влечет за собой хороший API, и, более конкретно, о том, как должен быть чисто RESTful API.

Ответ 2

@QueryParam используется для доступа к парам ключ/значение в строке запроса URL-адреса (часть после?). Например, в URL http://example.com?q=searchterm вы можете использовать @QueryParam("q"), чтобы получить значение q.

@PathParam используется для сопоставления части URL-адреса в качестве параметра. Например, в URL-адресе формы http://example.com/books/{bookid} вы можете использовать @PathParam("bookid") для получения идентификатора книги.

См. эту страницу для примера, используемого в JAX-RS.