Как создать URL REST без глаголов?

Удостоверьтесь, что включали надлежащий DOCTYPE.

я все еще вижу людей, регулярно справляющихся с проблемами модели поля, потому что они забыли включать doctype. Без надлежащего doctype Internet Explorer представляет в "режиме причуд", и также - другие браузеры до меньшей степени. При включении надлежащего doctype браузеры переключаются на "стандартный режим" и ведут себя очень похожие друг на друга.

Другой тогда, что, если Вы делаете это для жизни, Вы будете быстро брать и помнить те тонкие угловые случаи, где IE интерпретирует вещи, немного отличающиеся из Firefox, и т.д. С некоторым опытом, совершенно возможно разработать всю страницу в Вашем любимом браузере и только сделать очень крошечные тонкие настройки к CSS, чтобы заставить его представить почти пиксель, прекрасный в других браузерах.

280
задан Paulo Freitas 12 June 2017 в 02:14
поделиться

8 ответов

Возможно что-то вроде:

PUT /parameters/activation HTTP/1.1
Content-Type: application/json; encoding=UTF-8
Content-Length: 18

{ "active": true }
71
ответ дан 23 November 2019 в 01:59
поделиться

Общие принципы правильного дизайна URI:

  • Не используйте параметры запроса для изменения состояния
  • Не используйте пути в смешанном регистре, если можете Это; Лучше всего строчные буквы
  • Не используйте расширения, зависящие от реализации в ваших URI (.php, .py, .pl, и т. д.)
  • Не попадайте в RPC с вашими URI
  • Сделайте максимально ограничьте пространство URI
  • Сделайте сделайте сегменты пути короткими
  • Сделайте предпочтение либо / resource , либо / ресурс / ; создать 301 редирект из того, который вы не используете.
  • Используйте параметры запроса для подвыбора ресурса; т.е. разбивка на страницы, поисковые запросы
  • . перемещают данные из URI, которые должны быть в заголовке HTTP или теле

(Примечание: я не сказал "

  • 201 Создано после создания ресурса; ресурс должен существовать на момент отправки ответа
  • 202 Принято после успешного выполнения операции или создания ресурса асинхронно
  • 400 Плохой запрос , когда кто-то выполняет операцию с данными это явно подделка; для вашего приложения это может быть ошибка проверки; обычно резервируют 500 для неперехваченных исключений
  • 401 Unauthorized , когда кто-то обращается к вашему API без предоставления необходимого заголовка Authorization или когда учетные данные в Authorization недействительны; не используйте этот код ответа, если вы не ожидаете учетных данных через заголовок Authorization .
    • Заголовки ETag хороши, когда вы можете легко уменьшить ресурс до хэш-значения
    • Last-Modified должны указать вам, что сохранение отметки времени, когда обновляются ресурсы, является хорошей идеей
    • Cache-Control и Expires должны иметь разумные значения
  • Делайте все, что вы можете, чтобы учитывать заголовки кеширования в запросе ( If-None-Modified , If-Modified-Since )
  • Использовать ли перенаправления, когда они имеют смысл, но они должны быть редкими для веб-службы

Что касается вашего конкретного вопроса, POST следует использовать для № 4 и № 5. Эти операции подпадают под действие приведенного выше принципа «RPC-подобного». Что касается # 5, помните, что POST не обязательно должен использовать Content-Type: application / x-www-form-urlencoded .

986
ответ дан 23 November 2019 в 01:59
поделиться

Дизайн ваших URL-адресов не имеет ничего общего с тем, является ли ваше приложение RESTful или нет. Таким образом, фраза «RESTful URL» не имеет смысла.

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

Тем не менее, давайте перейдем к вашему вопросу: последние два случая не относятся к RESTful и не вписываются ни в какую успокаивающую схему. Это то, что вы могли бы назвать RPC. Если вы серьезно относитесь к REST, вам придется переосмыслить принцип работы вашего приложения с нуля. Либо так, либо откажитесь от REST и просто сделайте свое приложение RPC-приложением.

Хммм, может, и нет.

11
ответ дан 23 November 2019 в 01:59
поделиться

Когда вам кажется, что вам нужен новый глагол, подумайте о том, чтобы вместо этого превратить этот глагол в существительное. Например, превратите «активировать» в «активацию», а «проверить» - в «проверку».

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

Каждый раз, когда ресурс называется «параметр», он должен вызывать тревогу у каждого члена команды проекта. «параметр» может применяться буквально к любому ресурсу; он недостаточно конкретен.

Что именно означает «параметр»? Вероятно, множество разных вещей, каждой из которых должен быть посвящен отдельный ресурс.

Другой способ понять это - когда вы обсуждаете свое приложение с конечными пользователями (теми, кто предположительно мало разбирается в программировании), какие слова они сами часто используют?

Это те слова, на основе которых вы должны проектировать свое приложение .

Если у вас еще не было этого преобразования с потенциальными пользователями - остановите все прямо сейчас и не пишите ни одной строчки кода, пока не сделаете это! Только тогда ваша команда будет иметь представление о том, что необходимо создать.

Я ничего не знаю о финансовом программном обеспечении, но если бы мне пришлось угадывать, я бы сказал, что некоторые ресурсы могут иметь такие названия, как «Отчет», «Платежи», «Перевод» и «Валюта».

Есть ряд хороших книг по этой части процесса разработки программного обеспечения.

18
ответ дан 23 November 2019 в 01:59
поделиться

Я бы предложил следующие мета-ресурсы и методы.

Сделайте параметры активными и / или подтвердите их:

> PUT /parameters/<id>/meta HTTP/1.1
> Host: example.com
> Content-Type: application/json
> Connection: close
>
> {'active': true, 'require-valid': true}
>
< HTTP/1.1 200 OK
< Connection: close
<

Проверьте, являются ли параметры активными и действительными:

> GET /parameters/<id>/meta HTTP/1.1
> Host: example.com
> Connection: close
>
< HTTP/1.1 200 OK
< Content-Type: application/json
< Connection: close
<
< {
<     'active': true,
<     'require-valid': true,
<     'valid': {'status': false, 'reason': '...'}
< }
<
1
ответ дан 23 November 2019 в 01:59
поделиться

Изменить: Действительно, URI предотвратил бы сохранение идемпотентности запросов GET .


Однако для проверки использование кодов состояния HTTP для уведомления о действительности запроса (для создания нового или изменения существующего «параметра») соответствовало бы модели Restful.

Сообщите с кодом состояния 400 Bad Request , если отправленные данные являются недопустимыми и запрос необходимо изменить перед повторной отправкой ( Коды состояния HTTP / 1.1 ).

Это зависит от проверки во время отправки, а не откладывает ее, как в вашем случае использования. В других ответах есть подходящие решения для этого сценария.

0
ответ дан 23 November 2019 в 01:59
поделиться

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

http://example.com/amort_cal/2009-10-20/30yrsfixed/monthly/5.00/200000

Я не знаю, что вы рассчитываете, но ваша концепция списка параметров не звучит как RESTful. Как сказал кто-то другой, ваши требования выше звучат более XMLRPC. Если вы пытаетесь использовать REST, вам нужны существительные. Вычисления - это не существительные, это глаголы, действующие на существительные.

0
ответ дан 23 November 2019 в 01:59
поделиться

Требования активации и проверки - это ситуации, когда вы пытаетесь изменить состояние ресурс. Это ничем не отличается от того, что делается заказ «выполнен» или какой-либо другой запрос «отправлен». Существует множество способов моделирования таких изменений состояния, но один, который, как я считаю, часто срабатывает, - это создание ресурсов коллекции для ресурсов одного и того же состояния, а затем перемещение ресурса между коллекциями, чтобы повлиять на состояние.

например, Создайте некоторые ресурсы, такие как,

/ActiveParameters
/ValidatedParameters

Если вы хотите сделать набор параметров активным, добавьте этот набор в коллекцию ActiveParameters. Вы можете либо передать набор параметров в виде тела объекта, либо передать URL-адрес в качестве параметра запроса, как показано ниже:

POST /ActiveParameters?parameter=/Parameters/{Id}

То же самое можно сделать с помощью параметра / ValidatedParameters. Если параметры недействительны, сервер может вернуть «неверный запрос» к запросу, чтобы добавить параметры в коллекцию проверенных параметров.

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

например, Создайте некоторые ресурсы, такие как,

/ActiveParameters
/ValidatedParameters

Если вы хотите сделать набор параметров активным, добавьте этот набор в коллекцию ActiveParameters. Вы можете либо передать набор параметров в виде тела объекта, либо передать URL-адрес в качестве параметра запроса, как показано ниже:

POST /ActiveParameters?parameter=/Parameters/{Id}

То же самое можно сделать с помощью параметра / ValidatedParameters. Если параметры недействительны, сервер может вернуть «неверный запрос» к запросу, чтобы добавить параметры в коллекцию проверенных параметров.

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

например, Создайте некоторые ресурсы, такие как,

/ActiveParameters
/ValidatedParameters

Если вы хотите сделать набор параметров активным, добавьте этот набор в коллекцию ActiveParameters. Вы можете либо передать набор параметров в виде тела объекта, либо передать URL-адрес в качестве параметра запроса, как показано ниже:

POST /ActiveParameters?parameter=/Parameters/{Id}

То же самое можно сделать с помощью параметра / ValidatedParameters. Если параметры недействительны, сервер может вернуть «неверный запрос» к запросу, чтобы добавить параметры в коллекцию проверенных параметров.

Вы можете либо передать набор параметров в виде тела объекта, либо передать URL-адрес в качестве параметра запроса, как показано ниже:

POST /ActiveParameters?parameter=/Parameters/{Id}

То же самое можно сделать с помощью параметра / ValidatedParameters. Если параметры недействительны, сервер может вернуть «неверный запрос» к запросу, чтобы добавить параметры в коллекцию проверенных параметров.

Вы можете либо передать набор параметров в виде тела объекта, либо передать URL-адрес в качестве параметра запроса, как показано ниже:

POST /ActiveParameters?parameter=/Parameters/{Id}

То же самое можно сделать с помощью параметра / ValidatedParameters. Если параметры недействительны, сервер может вернуть «неверный запрос» к запросу, чтобы добавить параметры в коллекцию проверенных параметров.

6
ответ дан 23 November 2019 в 01:59
поделиться
Другие вопросы по тегам:

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