Comments 5
UFO just landed and posted this here
Как правильнее:
GET /users/25
или
GET /users/25
GET /users/25/roles
Т.е. можно ли (и когда именно) включать связанные коллекции в ответ сервера? И какая вложенность?
GET /users/25
{
"id" : 25,
"name" : "My Name",
"roles" : [{"id" : 42, "name" : "Some"}]
}
или
GET /users/25
{
"id" : 25,
"name" : "My Name"
}
GET /users/25/roles
[{"id" : 42, "name" : "Some"}]
Т.е. можно ли (и когда именно) включать связанные коллекции в ответ сервера? И какая вложенность?
0
Для django-rest-framework я вообще реализовал обработку запросов вида GET /users/25/?fields=id,name,roles.id и у меня в ответ:
[{
"id" : 25,
"name" : "My Name",
"roles" : [{"id" : 42}]
}]
0
На самом деле все три варианта имеют право на жизнь, плюс вариант с регулируемым набором полей в запросе, описанный TyVik ниже. Но везде есть ньюансы. Напомню, что мы говорим не о RESTfull API, а о Web-API, которое пересматривает концепт в пользу гибкости и универсальности, где возможности работы с данными лимитированы правами пользователя, как на получение набора данных, так и на запись, и методы работы с данными диктует серверная сторона.
1) Первый вариант возможен, если максимальное число ролей у пользователя лимитировано и не велико. Если их может быть миллион, то лучше запрашивать их отдельно, обращаясь к коллекции.
GET /roles?user_id=25. = GET /users/25/roles
2) Не во всех случаях клиент может иметь права на просмотр списка ролей, например, рядовой пользователь в большинстве случаев не может просматривать полную картину для другого пользователя.
1) Первый вариант возможен, если максимальное число ролей у пользователя лимитировано и не велико. Если их может быть миллион, то лучше запрашивать их отдельно, обращаясь к коллекции.
GET /roles?user_id=25. = GET /users/25/roles
2) Не во всех случаях клиент может иметь права на просмотр списка ролей, например, рядовой пользователь в большинстве случаев не может просматривать полную картину для другого пользователя.
0
Sign up to leave a comment.
Думы о web-API. часть вторая