URL закодированный POST плохая практика? - PullRequest
6 голосов
/ 16 июня 2010

Я (просто для удовольствия) пытаюсь внедрить веб-сервис High Score.Я хотел бы, чтобы это было совместимо с принципами REST.Я хочу иметь возможность добавить новый рекорд, используя параметры URL, как это http://mydomain.com/hs/add&name=John&score=987.Согласно REST это должно быть сделано с помощью запроса POST.Что приводит к пустому запросу POST со всеми данными, содержащимися в параметрах URL.Будет ли это считаться плохой практикой?

Обновление
Безопасность в настоящее время не является большой проблемой.

Ответы [ 6 ]

12 голосов
/ 16 июня 2010

Обычный способ сделать это - отправить POST на http://mydomain.com/hs/add с содержанием:

name=John&score=987 (для простых данных в кодировке urlen будет отличаться, например, для данных, состоящих из нескольких частей; формат тела запроса POST является произвольным и выходит за рамки рекомендаций REST - это могут быть даже произвольные зашифрованные данные, как другие предложил).

Запрос GET на добавление нового рекорда будет не только нарушением принципов REST, но и нарушением RFC 2616 , что требует, чтобы запросы GET были идемпотентными.

EDIT

Плохо ли передавать данные в строку запроса и публиковать пустое тело?

Да. URL должен описывать ресурс, который подвергается действию, описанному методом HTTP. Следовательно, вероятно, лучшим вариантом было бы иметь http://mydomain.com/hs в качестве URL-адреса и позволить телу полностью описать действие.

Строка запроса может использоваться для дальнейшей проверки запросов без тела, например ::1010

http://mydomain.com/hs?period=lastmonth (GET)

2 голосов
/ 16 июня 2010

Вы используете вопросительный знак перед параметрами, поэтому это будет: http://mydomain.com/hs/add?name=John&score=987. Однако идея заключается в том, что URL должен быть именем ресурса, а метод запроса должен решить, что делать.

Таким образом, правильный URL будет просто http://mydomain.com/hs, и вы вместо этого отправите параметры в данных POST. Поскольку это POST-запрос, он добавляет данные к ресурсу.

1 голос
/ 16 июня 2010

Нет, использование параметров url в POST не является плохой практикой для REST. Мне кажется, это совершенно правильный подход.

С эстетической точки зрения я бы предложил URL-адрес, такой как

 POST http://mydomain.com/highscores?name=John&score=987
0 голосов
/ 16 июня 2010

Используйте запрос POST для предотвращения следующей ситуации:

  • Вход пользователя в систему
  • Веб-браузер сохраняет информацию аутентификации между сеансами
  • Пользователь получает, например, электронное письмо сHTML содержит тег типа imagehttp://mydomain.com/hs/add?name=John&score=987' ... />
  • Почтовый клиент пытается загрузить изображение, автоматически использует учетные данные, хранящиеся в веб-браузере, а также добавляет или удаляет информацию из / вваша система молча.
0 голосов
/ 16 июня 2010

GET следует использовать при получении данных. При добавлении или обработке данных вы всегда должны использовать POST.

Таким образом, пользователь не будет:

  • Случайно зайдите на URL снова и сделайте все ваши данные грязными
  • Целенаправленно измените свою базу данных
0 голосов
/ 16 июня 2010

Очень плохо .. пользователь может манипулировать счетом. Вы должны применить какое-то шифрование, даже если оно простое, перед отправкой счета через строку запроса

...