RESTful url design
От: brunoid  
Дата: 19.02.15 21:50
Оценка:
работаю над структурой урл REST вебсервисов и думаю как сделать лучше.

например
/users — вернет список пользователей
/users/100 вернет конкретного пользователя

а как правильно сделать урл для получения информации об влогиненом пользователе ?
Re: RESTful url design
От: silverwolf  
Дата: 19.02.15 22:12
Оценка:
Здравствуйте, brunoid, Вы писали:

B>работаю над структурой урл REST вебсервисов и думаю как сделать лучше.


B>например

B>/users — вернет список пользователей
B>/users/100 вернет конкретного пользователя

B>а как правильно сделать урл для получения информации об влогиненом пользователе ?

Если речь таки о RESTful (кошерный REST), то никак То есть вам необходимо получить на клиент идентификатор текущего пользователя и потом, по идентификатору, информацию по пользователю. Если необходимы какие-то ограничения доступа, то они реализуются на уровне конкретного вызова (в вашем примере /users/100) или фильтров в которые он попадает.
Если же речь о REST-style API и нет цели жестко придерживаться REST, как архитектурного подхода, то можно сделать что-то вроде /users/currentUser, /users/loggedIn или /users/logged-in.
Вариант помуторней, но который позволит разделить REST-часть и "часть типа REST" — это сделать отдельный "внутренний" АПИ для подобных вызовов, то есть что-то на подобии /internal/users/loggedIn. Тут для принятия решения надо знать всю задачу целиком.
Re[2]: RESTful url design
От: brunoid  
Дата: 20.02.15 11:13
Оценка:
Здравствуйте, silverwolf, Вы писали:

S>Здравствуйте, brunoid, Вы писали:


B>>работаю над структурой урл REST вебсервисов и думаю как сделать лучше.


B>>например

B>>/users — вернет список пользователей
B>>/users/100 вернет конкретного пользователя

B>>а как правильно сделать урл для получения информации об влогиненом пользователе ?

S>Если речь таки о RESTful (кошерный REST), то никак То есть вам необходимо получить на клиент идентификатор текущего пользователя и потом, по идентификатору, информацию по пользователю. Если необходимы какие-то ограничения доступа, то они реализуются на уровне конкретного вызова (в вашем примере /users/100) или фильтров в которые он попадает.
S>Если же речь о REST-style API и нет цели жестко придерживаться REST, как архитектурного подхода, то можно сделать что-то вроде /users/currentUser, /users/loggedIn или /users/logged-in.
S>Вариант помуторней, но который позволит разделить REST-часть и "часть типа REST" — это сделать отдельный "внутренний" АПИ для подобных вызовов, то есть что-то на подобии /internal/users/loggedIn. Тут для принятия решения надо знать всю задачу целиком.

спасибо ! реализую вот такой урл /users/currentUser

сам сервис /user/* у меня засекьюрен при помощи oauth2 и таким образом при наличии accessToken сервис вернет либо пользователя которому этот токен выдан либо ошибку авторизации.
Re: RESTful url design
От: Miroff Россия  
Дата: 20.02.15 11:31
Оценка: 16 (3) +3
Здравствуйте, brunoid, Вы писали:

B>а как правильно сделать урл для получения информации об влогиненом пользователе ?


GET /session

Аналогично логин пользователя это

PUT(PUSH) /session

а логаут будет

DELETE /session

В REST если какие-то запросы не ложатся на существующую схему ресурсов, значит нужно придумывать новые ресурсы на которые эти запросы будут ложиться.
Re[3]: RESTful url design
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.03.15 19:10
Оценка:
Здравствуйте, brunoid, Вы писали:

B>сам сервис /user/* у меня засекьюрен при помощи oauth2 и таким образом при наличии accessToken сервис вернет либо пользователя которому этот токен выдан либо ошибку авторизации.

Не забудьте "вернуть пользователя" при помощи 302 Found с location: /users/xxxxx.
Это позволит клиенту следующим ходом взять данные пользователя из кэша.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: RESTful url design
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 28.02.16 05:33
Оценка:
S>Не забудьте "вернуть пользователя" при помощи 302 Found с location: /users/xxxxx.
А мне вот интересно, насколько много коллективов следуют всем концепциям, предусмотренным, скажем, RFC 2616?
Пишите, люди, рассказывайте...

Например, учет версий для оптимистической блокировки можно сделать кустарно, введя какое-то поле version в передаваемом состоянии. А можно — через Etag и прочее, что даст определенные преимущества. А там же довольно много нюансов — скажем, если мы внесли свои коррективы в переданное в PUT состояние, мы не имеем права на него возвращать Etag.
Ну или можно сделать создание ресурса — без указания конкретного id — через PUT, а не POST, что вроде бы тоже нарушает конвенцию.
Можно url называть file/{id}/upload, file/{id}/download, file/{id}/delete, и все их запрашивать через GET.

Мой вопрос сводится к чему... насколько вообще важно знать "настоящие", правильные, "by design" подходы к созданию REST API, или можно делать как бог на душу положит и никто за это на тебя косо смотреть не будет? А то может "по мануалам" это делают в одной конторе из сотни...

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[3]: RESTful url design
От: velkin Земля  
Дата: 28.02.16 22:20
Оценка:
Здравствуйте, brunoid, Вы писали:

B>спасибо ! реализую вот такой урл /users/currentUser


Вот только есть ли смысл повторять два раза user, может быть хватило бы и

/users/current

Предположим , что у текущего пользователя есть имя, тогда по аналогии запрос был бы уже

/users/currentUser/currentUserName

вместо

/users/current/name

Но это так, просто размышления.
Re[5]: RESTful url design
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 01.03.16 22:58
Оценка:
Здравствуйте, Slicer [Mirkwood], Вы писали:

SM>Ну или можно сделать создание ресурса — без указания конкретного id — через PUT, а не POST, что вроде бы тоже нарушает конвенцию.


Я тут не так давно спрашивал об этом и мне посоветовали
Автор: gandjustas
Дата: 24.11.15
более удачный вариант — создавать пустую запись через POST, после чего обновлять её уже через PUT.

SM>Можно url называть file/{id}/upload, file/{id}/download, file/{id}/delete, и все их запрашивать через GET.


GET неправильно использовать для этих целей. Запрос GET не должен изменять состояние данных.
Результаты GET-запросов могут кэшироваться и одно из последствий такого подхода будет то, что повторные запросы просто не будут отправляться — какая-нибудь промежуточная прокся или кэш приложения будут просто возвращать готовое значение на такой вот {id}/upload.

SM>насколько вообще важно знать "настоящие", правильные, "by design" подходы к созданию REST API, или можно делать как бог на душу положит и никто за это на тебя косо смотреть не будет?


Неправильные подходы чреваты очень скорыми проблемами. Это просто к вопросу об удобности любого API, в т.ч. и REST API. Если сделать криво и косо, то это гарантированно принесёт баги и тихую ненависть пользователей этого API.
С уважением, Artem Korneev.
Re[6]: RESTful url design
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 02.03.16 03:59
Оценка:
Здравствуйте, Artem Korneev, Вы писали:

AK>GET неправильно использовать для этих целей. Запрос GET не должен изменять состояние данных.

AK>Результаты GET-запросов могут кэшироваться и одно из последствий такого подхода будет то, что повторные запросы просто не будут отправляться — какая-нибудь промежуточная прокся или кэш приложения будут просто возвращать готовое значение на такой вот {id}/upload.
Ну, не скажите. Кэш приложения вы же сами и контролируете. Данные-то у вас все равно меняются, значит, должен быть способ не кешировать запросы в зависимости от каких-то условий. Прокси тоже не должен кешировать все подряд, либо это должно какими-то хедерами контролироваться (правильная простановка которых, кстати, обычно в начальных примерах по REST не описывается), т.е. тоже вполне управляемо. Так что это, по-моему, просто страшилки, за которыми по факту стоит общий настрой "делать как задумано конвенцией". Что, я считаю, неплохо, если б не тот печальный факт, что отнюдь не все ее придерживаются.

Вот я и хотел узнать, как много людей придерживаются. Но пока, кроме вас, никто не ответил ничего =)

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.