Rest services. Best Practices.
-
- Уже с Приветом
- Posts: 292
- Joined: 09 Aug 2007 21:20
- Location: new york
Rest services. Best Practices.
Начальник требует что бы в POST запросах не было никаких id.
Т.е. если нужно например сохранить список preferences для определенного юзера, то и список preferences и user id требует передавать через сессию.
А мне кажется что нужно что бы url был
user/{id}/preferences
Прав я или не прав, и как его убедить? Или не принципиально?
Вообще, есть ли какие то стандарты качественных rest url?
Т.е. если нужно например сохранить список preferences для определенного юзера, то и список preferences и user id требует передавать через сессию.
А мне кажется что нужно что бы url был
user/{id}/preferences
Прав я или не прав, и как его убедить? Или не принципиально?
Вообще, есть ли какие то стандарты качественных rest url?
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Rest services. Best Practices.
ну restful говорит что нужно через url. А как начальника аргументирует? Гиг на секьюрити?
-
- Уже с Приветом
- Posts: 292
- Joined: 09 Aug 2007 21:20
- Location: new york
Re: Rest services. Best Practices.
Не нашел чтоб конкретно советовали id через url посылать.kostik78 wrote:ну restful говорит что нужно через url.
Начальник например вот прислал
http://stackoverflow.com/questions/6119 ... dea-or-not
You want reasons? Here's one:
A web form can't be used to send a request to a page that uses a mix of GET and POST. If you set the form's method to GET, all the parameters are in the query string. If you set the form's method to POST, all the parameters are in the request body.
Source: HTML 4.01 standard, section 17.13 Form Submission
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Rest services. Best Practices.
А простой user1 по задумке должен иметь возможность сохранять список preferences для user2, или только для себя?
-
- Уже с Приветом
- Posts: 292
- Joined: 09 Aug 2007 21:20
- Location: new york
Re: Rest services. Best Practices.
для любого юзера конечно. Иначе пример бы не имел смыслаhelg wrote:А простой user1 по задумке должен иметь возможность сохранять список preferences для user2, или только для себя?
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Rest services. Best Practices.
Имхо бред. Берем например известный продукт - elasticsearch. Там POST/PUT имеет и параметры и тело и оба можно миксовать. В моей конторе также в нашем api. Или twilio (если не ошибаюсь).
Я знаю только один good reason когда что-то не рекомедуется передавать в POST как парамеры - это что-то сенсетив типа паролей, сессии и любую информацию что попадает под PII. Причина проста, url request может быть кеширован и эта инфа попадет в кеш. Body никогда(почти) не кешируется.
Я знаю только один good reason когда что-то не рекомедуется передавать в POST как парамеры - это что-то сенсетив типа паролей, сессии и любую информацию что попадает под PII. Причина проста, url request может быть кеширован и эта инфа попадет в кеш. Body никогда(почти) не кешируется.
-
- Уже с Приветом
- Posts: 292
- Joined: 09 Aug 2007 21:20
- Location: new york
Re: Rest services. Best Practices.
Имхо тоже бред. Но мне бы побольше аргументов Или авторитетных источников со стандартами.
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Rest services. Best Practices.
я боюсь что стандарта на эти вещи нет. Я не встречал. Есть common practice которая не запрещает делать микс параметров и боди для POST/PUT кроме случая что я описал (PII)
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Rest services. Best Practices.
Очень странно. На форуме, например, простой пользователь может менять только свои собственные настройки.newyorker wrote:для любого юзера конечно. Иначе пример бы не имел смыслаhelg wrote:А простой user1 по задумке должен иметь возможность сохранять список preferences для user2, или только для себя?
-
- Уже с Приветом
- Posts: 292
- Joined: 09 Aug 2007 21:20
- Location: new york
Re: Rest services. Best Practices.
А админ может менять настройки любого. Или банить любого. Или в группу добавлять любого. Вы не к примеру придирайтесь, а лучше по сути скажитеhelg wrote:Очень странно. На форуме, например, простой пользователь может менять только свои собственные настройки.newyorker wrote:для любого юзера конечно. Иначе пример бы не имел смыслаhelg wrote:А простой user1 по задумке должен иметь возможность сохранять список preferences для user2, или только для себя?
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Rest services. Best Practices.
Именно что админ.newyorker wrote:А админ может менять настройки любого. Или банить любого. Или в группу добавлять любого. Вы не к примеру придирайтесь, а лучше по сути скажите
Авторизацию: что данному пользователю позволено, а что - нет, принято писать не в коде бизнес-логики, а слоем поверх неё. Чтобы авторизация была как вахтёр на проходной: есть пропуск фиолетового цвета - проходи в фиолетовый корпус, нет - увы. Это выстраданный подход. Когда авторизация перемешана с бизнес-логикой, система, как правило, уязвима. Если не сразу, то после пары релизов так точно.
В данном случае правильно создать два дерева URL:
/service/user/...
/service/admin/...
и настроить авторизацию фильтром по URL. В первом дереве не должно быть userid в параметрах, во втором - пожалуйста.
-
- Уже с Приветом
- Posts: 292
- Joined: 09 Aug 2007 21:20
- Location: new york
Re: Rest services. Best Practices.
ок, я повторю (перефразирую) вопрос.
У начальника (архитектора) требование что бы ни в каком из POST URL НИКОГДА не было никаких параметров. Все ID передавать через body.
Мне нужны аргументы что бы ему доказать что ИНОГДА это стоит использовать.
Или может проще согласиться и не стоит бодатья с упрямым начальником из за ерунды?
У начальника (архитектора) требование что бы ни в каком из POST URL НИКОГДА не было никаких параметров. Все ID передавать через body.
Мне нужны аргументы что бы ему доказать что ИНОГДА это стоит использовать.
Или может проще согласиться и не стоит бодатья с упрямым начальником из за ерунды?
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Rest services. Best Practices.
URL оседают в логах веб-сервера, причем часто не одного - а всей цепочки. Доступ к логам, обычно, не так строго контролируется, как к базе пользователей. Возможно, начальник не хочет утечки каких-нибудь данных из базы через логи.
-
- Уже с Приветом
- Posts: 292
- Joined: 09 Aug 2007 21:20
- Location: new york
Re: Rest services. Best Practices.
К GET запросам у него претензий нет. Я так понял (но не уверен) что он хочет что бы все параметры были в одном месте. Если GET то в URL, если POST то в body.
-
- Уже с Приветом
- Posts: 4827
- Joined: 15 May 2001 09:01
Re: Rest services. Best Practices.
Запутано как-то всё. В первом сообщении вопрос про требование передачи user ID через сессию. Потом, что требование - не через сессию, а через тело POST. Полагаю, следует не гадать, а уточнить требование напрямую у начальника. А заодно и его обоснование.
-
- Уже с Приветом
- Posts: 292
- Joined: 09 Aug 2007 21:20
- Location: new york
Re: Rest services. Best Practices.
Главное его требование - передавать параметры "через одно и то же место "
Если GET - то URL
если POST - то в BODY, а в URL ни ни.
Если GET - то URL
если POST - то в BODY, а в URL ни ни.
-
- Уже с Приветом
- Posts: 3175
- Joined: 17 May 2007 14:07
Re: Rest services. Best Practices.
Слушайте а Вам какой бенефит от того что Вы его переубедите кроме потраченных нервов ? Ну хочется ему так, пусть будет так. Может чел в армии служил и с тех пор приучен к "порядку"
-
- Уже с Приветом
- Posts: 292
- Joined: 09 Aug 2007 21:20
- Location: new york
Re: Rest services. Best Practices.
Да я уже к тому же мнению пришел. Просто было интересно мнение народа узнать
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Rest services. Best Practices.
Зависит наверное как у вас эти самые preferences хранятся и используются. А вот скажем почему совбственно не:newyorker wrote:Начальник требует что бы в POST запросах не было никаких id.
Т.е. если нужно например сохранить список preferences для определенного юзера, то и список preferences и user id требует передавать через сессию.
А мне кажется что нужно что бы url был
user/{id}/preferences
Прав я или не прав, и как его убедить? Или не принципиально?
Вообще, есть ли какие то стандарты качественных rest url?
GET:
/preferences/12345
{ "id" : "12345",
"userId" : " abs678",
......
}
Соотвественно POST на /preferences
Насчет источников - очень уважаю эту книгу https://pages.apigee.com/rs/apigee/imag ... 012-03.pdf" onclick="window.open(this.href);return false;
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 292
- Joined: 09 Aug 2007 21:20
- Location: new york
Re: Rest services. Best Practices.
За книгу спасибо, почитаем
preferences это List внутри User обьекта.
preferences это List внутри User обьекта.
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Rest services. Best Practices.
В смысле list of settings? Или у одного юзера может быть несколько preferences ?newyorker wrote:За книгу спасибо, почитаем
preferences это List внутри User обьекта.
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 292
- Joined: 09 Aug 2007 21:20
- Location: new york
Re: Rest services. Best Practices.
У одного юзера могут быть разные preferences. Их список у него. Список хранятся не в отделньой коллекции, а в юзере.
Но это все не важно. Вопрос был о том как бороться и нужно ли бороться, если тебе запрещают использовать в POST запросах id в URL.
Но это все не важно. Вопрос был о том как бороться и нужно ли бороться, если тебе запрещают использовать в POST запросах id в URL.
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Rest services. Best Practices.
При таком раскладе я бы не делала отдельный endpoint для preferences. А preferences бы добавляла через HTTP PATCH к обьекту юзер.newyorker wrote:У одного юзера могут быть разные preferences. Их список у него. Список хранятся не в отделньой коллекции, а в юзере.
Но это все не важно. Вопрос был о том как бороться и нужно ли бороться, если тебе запрещают использовать в POST запросах id в URL.
Нужно ли бороться - это вообще вопрос политический, а не про best practices
Если ваш босс считает что id почему бы то ни было неуместны в сочетании с POST - пусть приведет источник таких best practices. Скажите что очень хотите ознакомится с его best practices поподробнее
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 292
- Joined: 09 Aug 2007 21:20
- Location: new york
Re: Rest services. Best Practices.
даже если нужно обновлять все preferences одной кучей одновременно?Сабина wrote:При таком раскладе я бы не делала отдельный endpoint для preferences. А preferences бы добавляла через HTTP PATCH к обьекту юзер.newyorker wrote:У одного юзера могут быть разные preferences. Их список у него. Список хранятся не в отделньой коллекции, а в юзере.
Но это все не важно. Вопрос был о том как бороться и нужно ли бороться, если тебе запрещают использовать в POST запросах id в URL.
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Rest services. Best Practices.
Такое вроде только при создании эуккаунта из темплейта бывает? Например добавить default preferences. Добавляйте тогда сразу к обьекту юзер и через POST на /users добавляйте. Отдельный endpoint имеет смысл держать если преференсис живут сами по себе, а юзера сами по себе.newyorker wrote: даже если нужно обновлять все preferences одной кучей одновременно?
Если список преференсес составляет бОльшую часть user JSON обновлять можно через PUT.
Вытащить только preferences можно добавив partial response который еще для тонны всяких других задач полезный.
/users/abs123?fields=pereferences.*
Так чем он мотивирует то что id в POST нельзя?
Last edited by Сабина on 25 May 2015 22:18, edited 1 time in total.
https://www.youtube.com/watch?v=wOwblaKmyVw