Запросить Restful API с передачей имени пользователя и пароля

Я создаю Restful API для своих пользователей.

У меня есть:

1. GET -> Users / {id} Это нужно получить по Id
2. POST -> Users / {DTO} Это для добавления
3. PATCH / PUT -> Пользователи / {DTO} Это для обновления информации
4. УДАЛИТЬ -> Пользователи / {id} Удаление
5. УДАЛИТЬ -> Пользователи / {username} / reset_pass Сбросить пароль
6. POST -> Пользователи /? Username = {userName} & password = {password}

Так что я немного не уверен насчет числа 5 и 6 (особенно 6).

Хотелось бы знать, что вы думаете по этому поводу? отправка пароля моего пользователя в строке запроса в Body.

Думаю, Uber использует шаблон, который я использовал для сброса пароля. Что ты об этом думаешь ?

Спасибо


person Raha Mohebbi    schedule 19.08.2015    source источник


Ответы (2)


4. DELETE -> Users/{id} Removing 
5. DELETE -> Users/{username}/reset_pass Reset Password 
  • Это непоследовательно. Вы либо идентифицируете себя по идентификатору пользователя, либо по именам пользователей. Если вам нужны оба варианта, используйте разные схемы именования URL-адресов.
  • reset_pass - это глагол вроде. Рассмотрите возможность использования DELETE Users/{id}/password. В зависимости от того, что происходит с паролем, DELETE может подходить или не подходить для варианта использования.

6. POST -> Users/?username={userName}&password={password}

Опять же, это не соответствует вашему формату URL. Если вы хотите создать новый пароль для пользователя, используйте POST Users/{id}/password.

Хотелось бы знать, что вы думаете по этому поводу? отправка пароля моего пользователя в строке запроса в Body.

Лучше смоделировать его в теле запроса, однако с точки зрения безопасности это не имеет значения. Если вы не используете HTTPS, кто-либо сможет обнаружить HTTP POST независимо от того, в какое место в запросе вы решите передать свои данные.

person Deepak Bala    schedule 19.08.2015
comment
Спасибо, Дипак. Мне нравятся твои ответы. Я собираюсь изменить номер 6. Что, если моя конечная точка удаления не будет удалять пользователя навсегда? В этом случае нам придется мягко удалить пользователя? - person Raha Mohebbi; 19.08.2015
comment
Я все еще не понимаю номер 5. Мы собираемся сгенерировать токен и отправить пользователю электронное письмо со ссылкой для нажатия. Так что я не уверен, нужно ли мне использовать для этого DELETE? Может быть, PATCH - лучшая альтернатива? - person Raha Mohebbi; 19.08.2015
comment
Вы не можете напрямую отправлять ссылки на DELETE или PATCH. Нажатие на эти результаты приводит к GET запросу. Напишите простую HTML-страницу, которая может выполнять запросы ajax с использованием метода DELETE HTTP, и отправьте ссылку с параметрами по электронной почте. Вы можете мягко или жестко удалить "за кулисами". - person Deepak Bala; 19.08.2015

Это всего лишь мое мнение, но в №6, возможно, было бы лучше поместить пароль в тело JSON запроса POST. Таким образом, это не прямо в URL-адресе (и я думаю, что принципы REST гласят, что когда вы POST, вы должны иметь тело как объект, который публикуется).

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

person Rohan    schedule 19.08.2015
comment
Это внутренний API, и мы защищаем наши службы с помощью брандмауэра и других методов безопасности. Что ты думаешь об этом? Я пытался убедить свою команду использовать SSL, но архитектор не хотел его использовать. - person Raha Mohebbi; 19.08.2015