Pull to refresh

Comments 5

UFO just landed and posted this here
Как правильнее:
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"}]

Т.е. можно ли (и когда именно) включать связанные коллекции в ответ сервера? И какая вложенность?
Для django-rest-framework я вообще реализовал обработку запросов вида GET /users/25/?fields=id,name,roles.id и у меня в ответ:
[{
"id" : 25,
"name" : "My Name",
"roles" : [{"id" : 42}]
}]

На самом деле все три варианта имеют право на жизнь, плюс вариант с регулируемым набором полей в запросе, описанный TyVik ниже. Но везде есть ньюансы. Напомню, что мы говорим не о RESTfull API, а о Web-API, которое пересматривает концепт в пользу гибкости и универсальности, где возможности работы с данными лимитированы правами пользователя, как на получение набора данных, так и на запись, и методы работы с данными диктует серверная сторона.

1) Первый вариант возможен, если максимальное число ролей у пользователя лимитировано и не велико. Если их может быть миллион, то лучше запрашивать их отдельно, обращаясь к коллекции.

GET /roles?user_id=25. = GET /users/25/roles

2) Не во всех случаях клиент может иметь права на просмотр списка ролей, например, рядовой пользователь в большинстве случаев не может просматривать полную картину для другого пользователя.
Sign up to leave a comment.

Articles