Как создать RESTful URL с большим количеством входных параметров

Я работаю над созданием RESTful API на основе Java, который использует Spring MVC.

Теперь для некоторых конечных точек API требуется несколько разных параметров... Я не говорю о списке значений, больше похожем на параметр1, параметр2, параметр3, параметр4 и т. д., где все 4 (или более) параметры также имеют разные типы данных.

Как создать URL-адрес конечной точки API для описанного выше сценария, например, для 4 отдельных входных параметров? Есть ли какой-либо рекомендуемый способ/лучшая практика для этого? Или мне просто объединить 4 значения, при этом каждая пара значений разделена разделителем, например «/»?

РЕДАКТИРОВАТЬ из комментария пользователя:

Пример: мне нужно получить пользовательский объект («файл») на основе 4 входных параметров: (целое число) идентификатор пользователя, (целое число) идентификатор файла, (строка) тип и (строка) тип пользователя. Должен ли я просто создать конечную точку REST, например «getfile/{userid}/{fileid}/{type}/{usertype} — или есть лучший (или рекомендуемый способ) создания таких конечных точек REST?


person Arvind    schedule 07.03.2013    source источник
comment
Я думаю, вам нужно указать ресурсы и какие это параметры, чтобы люди могли вам помочь.   -  person bryanmac    schedule 07.03.2013
comment
@bryanmac - хорошо, один пример: мне нужно получить пользовательский объект («файл») на основе 4 входных параметров: (целое число) идентификатор пользователя, (целое число) идентификатор файла, (строка) тип и (строка) тип пользователя. Должен ли я просто создать конечную точку REST, например getfile/{userid}/{fileid}/{type}/{usertype}, или есть лучший (или рекомендуемый способ) создания таких конечных точек REST? Спасибо...   -  person Arvind    schedule 07.03.2013


Ответы (2)


В REST начните с размышлений о ресурсе и придумайте неизменяемые постоянные ссылки (неизменные) для идентификации этого ресурса.

Итак, в вашем примере (в комментарии) вы сказали, что хотите получить файловый ресурс для пользователя и типа (тип файла или тип пользователя?)

Итак, начните с информации, достаточной для идентификации ресурса. Если id уникален, то этого достаточно, чтобы идентифицировать ресурс вне зависимости от пользователя, которому принадлежит файл:

/files/{fileId}

Это также важно как URL-адрес, если у файла может измениться владелец — помните, что мы хотим идентифицировать ресурс только с необходимыми компонентами, чтобы он мог быть постоянной ссылкой.

Вы также можете перечислить файлы для конкретного пользователя:

/users/{userId}/files/

Ответ будет содержать список файлов, и каждый из этих элементов в списке будет содержать ссылки на файлы (/files/{fileId})

Если по какой-то причине идентификатор файла не уникален, а уникален только в контексте пользователя (файлы не меняют владельцев и идентификатор увеличивается внутри пользователя - странно), вам понадобятся эти компоненты для идентификации ресурса:

/users/{userId}/files/{fileId}

Также обратите внимание на порядок, основанный на описании. В этом странном случае мы сказали, что файлы логически содержатся и идентифицируются пользователем, и это также является сдерживанием в структуре URL-адреса.

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

person bryanmac    schedule 07.03.2013

Запрос GET к file/{usertype}/{user}/{type}/{fileid} звучит хорошо

person Arun P Johny    schedule 07.03.2013
comment
@ArunPJohny- Нет ли лучшего/более элегантного способа сделать это? Я имею в виду, есть ли альтернатива тому, чтобы запрашивать все 4 параметра один за другим? Спасибо.... - person Arvind; 07.03.2013
comment
Я так не думаю, для запроса вам нужны все 4 параметра, а значит, вам придется отправить их на сервер. Вопрос только как, а как ресурс отдыха это лучший формат ИМХО - person Arun P Johny; 07.03.2013