Вопрос по rest – URL RESTful для получения ресурса по разным полям

4

Простой вопрос У меня не получается найти ответ на ...

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

пример Я хочу (и уже реализовал)

/Person/{ID}

который возвращает человека, как и ожидалось.

Теперь я тоже хочу

/Person/{Name}

который возвращает человека по имени.

Это правильный формат RESTful? Или это что-то вроде:

/Person/Name/{Name}

Ваш Ответ

2   ответа
6

чие нескольких URI приведет только к путанице. В вашем примере путаница может возникнуть из-за двух людей с одинаковыми именами. На какой ресурс человека они ссылаются?

Тем не менее, вы можете иметь несколько URI, ссылающихся на один ресурс, но для чего угодно, кроме & quot; true & quot; URI, вы должны просто перенаправить клиента в нужное место, используя код состояния301 - Moved Permanently.

Лично я бы никогда не реализовал схему с несколькими ID или перенаправление для ее поддержки. Выберите единую схему идентификации и придерживайтесь ее. Пользователи вашего API будут вам благодарны.

Что вам действительно нужно для создания, так это API запросов, поэтому сосредоточьтесь на том, как бы вы реализовали что-то вроде/personFinder ресурс, который может принимать имя в качестве параметра и возвращать потенциально многократное соответствие/person/{ID} URI в ответе.

1

что технически вы могли бы указывать оба URI на один и тот же ресурс (возможно, с одним из них в качестве канонического ресурса), но я думаю, что вы не захотите делать это с точки зрения реализации. Что, если между идентификаторами и именами есть совпадение?

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

person/{ID} 

а также

personByName/{Name}
Я подумал, что будет стандартный способ сделать это, похоже, это будет общим для меня. Спасибо за ваш вклад. Erix
Я думаю, что самым стандартным способом сделать это было бы то, что вы исключили - параметры запроса. Кроме того, содержание вашего URL не делает его RESTful или нет, но это, похоже, не является суть вопроса.
Если вы просто создадите новый шаблон URI для поиска по имени (например, / personByName / {Name}, то вы в конечном итоге создадите новый шаблон для каждого нового параметра, который вам придет в голову (и каждой комбинации этих параметров!). Если вы & apos; если вы чувствуете себя хорошо, учитывая вероятность того, что это все, что у вас когда-либо будет, вы, безусловно, можете сделать это следующим образом. Опять же, более стандартный подход заключался бы в том, чтобы / person? name = {Name} возвращал список людей, соответствующих название.

Похожие вопросы