Это плохой URL-адрес REST?

Я только что читал об URL-адресах REST и видел следующий пример:

/ API / Пользователь / GetUser

Теперь, если доступ к нему осуществляется через HTTP с помощью команды GET, разве это не плохой URL-адрес, потому что он описывает действие (GET) в URL-адресе?


person AwkwardCoder    schedule 05.02.2010    source источник
comment
Стоит отметить, что сам REST просто требует, чтобы URL-адреса однозначно определяли ресурс и не придали никакого конкретного семантического значения. Потребитель службы должен рассматривать URL-адреса как непрозрачные и использовать принцип, согласно которому представления ресурсов будут содержать URL-адреса для других ресурсов для навигации по службе. Сказав все это, бесспорно полезно для человеческого «потребителя» иметь возможность интерпретировать URL-адреса служб как иерархическую структуру.   -  person Joe    schedule 05.02.2010
comment
@Joe: Думаю, вы упустили суть вопроса, который, как я его читал, касается глаголов и существительных, а не иерархии в смысле файловой системы.   -  person    schedule 05.02.2010
comment
@Roger прав, меня интересовало мнение людей о глаголе в URL ...   -  person AwkwardCoder    schedule 05.02.2010


Ответы (5)


Не существует такой вещи, как URL-адрес REST. Фактически, слово REST URL в значительной степени оксюморон. Ограничение Гипермедиа как механизм состояния приложения гарантирует, что URL-адреса не имеют отношения к делу: в любом случае вы переходите только по ссылкам, предоставленным вам сервером. Вы нигде не видите, не читаете и не вводите URI. (Точно так же, как просмотр веб-страниц: вы не смотрите URL-адрес ссылки, не читаете ее, не запоминаете, а затем вводите в адресную строку; вы просто нажимаете на нее и не заботитесь о том, что она на самом деле говорит.)

Термин URL-адрес REST означает, что вы заботитесь о своих URL-адресах в своей архитектуре REST. Однако, если вы заботитесь о своих URL-адресах в архитектуре REST, вы не относитесь к RESTful. Следовательно, URL-адрес REST - это оксюморон.

[Примечание: правильный дизайн URI очень важен для URI-соответствия URI, особенно части I. Кроме того, для красивых URL есть множество веских причин для удобства использования. Но оба они не имеют никакого отношения к REST.]

person Jörg W Mittag    schedule 05.02.2010
comment
@ Jörg - Я понимаю вашу точку зрения, но в реальном мире, где у вас есть разработчики, создающие RESTful API, доступ к которым осуществляется через HTTP, я должен учитывать это, чтобы попытаться понять их мышление - person AwkwardCoder; 06.02.2010
comment
Остальные URL-адреса - это абсурд, а микроформаты в этом вопросе совершенно необразованы. Проголосовали. - person SerialSeb; 08.02.2010
comment
Я понимаю суть, но это кажется педантичным, вы четко понимаете основной вопрос, который задают, даже если формулировка неверна. Он спрашивал, плохой ли путь, который он использует. - person Amalgovinus; 19.04.2018
comment
@Amalgovinus: Это не может быть плохим тоном, потому что форма не имеет значения. HATEOAS означает, что вы переходите по ссылкам. Вы их не читаете. Следовательно, совершенно неважно, как выглядят URI. - person Jörg W Mittag; 19.04.2018
comment
Если я буду создавать API для других разработчиков, то HATEOAS - это не философия, которой я собираюсь следовать. - person Amalgovinus; 19.04.2018
comment
@Amalgovinus: HATEOAS - это не философия. Это одно из ограничений, определенных ReST (и самое важное из них). Вопрос явно касается ReST, OP упоминает ReST дважды в теле, один раз в заголовке и пометил вопрос с помощью отдых. Я не понимаю, как полное игнорирование ReST в вопросе, который касается исключительно ReST, поможет OP. Существуют и другие архитектурные стили для построения информационных систем, и сам Рой Филдинг неоднократно указывал, что ReST не имеет смысла, если вы не создаете что-то, что охватывает… - person Jörg W Mittag; 19.04.2018
comment
… Несколько организаций и несколько поколений, но это не имеет значения. ОП не спрашивает о каком-то другом архитектурном стиле, он спрашивает о ReST, поэтому ответ касается ReST. - person Jörg W Mittag; 19.04.2018

Это скорее условность, чем жесткое правило, но я бы предпочел увидеть что-то вроде /API/User/7123. GET / POST / etc описывает глагол действия, поэтому его добавление в URL-адрес делает его излишним. И в этой ситуации нет причин не следовать хорошей проверенной практике.

Вот несколько хороших вещей: Что такое REST: глаголы, коды ошибок и аутентификация

person adamJLev    schedule 05.02.2010
comment
@SLott Как насчет / Dictionary / English / Kick, чтобы получить определение слова Kick? - person Darrel Miller; 05.02.2010
comment
@ Даррел Миллер: Токен Kick не используется как глагол; он используется как строка графем для идентификации определенного слова. Это не глагол, потому что он используется в качестве инструкции, что делать. Это просто персонажи. - person S.Lott; 06.02.2010
comment
@ S.Lott В интерфейсе REST предполагается, что URI непрозрачны для клиента, поэтому все они являются просто символами. Проблема в том, что у нас есть ситуация с культом карго, когда все, кажется, знают, что в URI не должно быть глаголов, но очень немногие знают, почему. - person Darrel Miller; 06.02.2010
comment
Когда люди помещают глаголы в URL-адреса, потенциально возникает несколько негативных побочных эффектов. Во-первых, это может сильно сбить с толку пользователя интерфейса, особенно когда поведение команды HTTP и команды в URI противоречит. Во-вторых, это может привести к нарушению ожидаемого поведения HTTP-глагола. Классическим примером этого является использование операций «GET / myresource / delete». Однако, если вы посмотрите несколько примеров, вы увидите что-то вроде «GET / myresource / edit». Это может быть совершенно верно, а может и нет, однако вы не можете сказать, что это нарушает REST, потому что в URL-адресе есть глагол. - person Darrel Miller; 08.02.2010
comment
@ S.Lott Нет, я говорю не об этом, но мы явно не очень хорошо общаемся в этой среде, так что давайте откажемся, пока эта тема не испортилась еще больше. - person Darrel Miller; 08.02.2010
comment
@ S.Lott Глагол МОЖЕТ быть частью URL до тех пор, пока не нарушается единый интерфейс. Наличие глагола в URL-адресе - это запах, который указывает на то, что унифицированный интерфейс может быть нарушен, но вы не можете сказать, просто взглянув на URL-адрес. Лично я бы не стал помещать глагол в URL-адрес, но это только мое предпочтение. - person Darrel Miller; 08.02.2010
comment
Я думаю, что Даррелл пытается сказать, что люди следуют правилам, не зная почему, включая соглашения RESTy URI. Я согласен с этим, люди должны уделить минуту, чтобы понять / выяснить, почему мы следуем этим соглашениям, есть причина. - person adamJLev; 08.02.2010
comment
@ S.Lott Я думаю, вы точно знаете, о чем я говорю, но вы пытаетесь быть последним, кто комментирует в ветке, и хотели бы, чтобы последний комментарий вложил мне в рот слова, которые означают, что я согласен с вашим первоначальным утверждением. Конечно, у тебя есть дела поважнее. - person Darrel Miller; 08.02.2010
comment
@ Даррел Миллер: Я архитектор веб-сервисов. Я пытаюсь понять архитектуры веб-сервисов. Я пытаюсь понять вашу точку зрения. Я пытаюсь получить однозначное «да» или «нет» на ваше мнение о глаголах в URL-адресах. Если ваше мнение «да», я пытаюсь получить четкое обоснование для этого «да» без надобности примера или запаха кода. Однако из вашего последнего комментария кажется, что мне следует прекратить попытки полностью понять вашу точку зрения и придерживаться своего поверхностного непонимания. Я просто хотел понять вашу точку зрения. - person S.Lott; 08.02.2010

Лучше было бы иметь / API / User / 7123 и использовать метод GET / POST для обозначения операций

person epitka    schedule 05.02.2010

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

Например, нет причин, по которым вы не хотели бы запускать GET на / API / Users / {id} / Delete для отображения сообщения типа «вы уверены» перед использованием метода DELETE.

person Nick Larsen    schedule 05.02.2010

/API/User/GetUser не является RESTful. Использование глагола для обозначения ресурса - нехорошо. URL-адрес примера все еще действителен, но это тоже не значит. Это так же неправильно, как и следующее заявление

String phoneNumber = "[email protected]";
person Abrsh    schedule 26.08.2012