REST API дизайн для получения сводной информации - PullRequest
4 голосов
/ 30 марта 2010

У меня есть сценарий, в котором у меня есть REST API, который управляет ресурсом, который мы назовем Группой. Группа похожа по своей концепции на дискуссионный форум в группах Google.

Теперь у меня есть два метода доступа GET, которые, я считаю, нуждаются в отдельных представлениях.

1-й метод доступа GET извлекает минимальное количество информации о группе. С учетом group_id он должен возвращать минимальный объем информации, такой как

{ 
    group_id: "5t7yu8i9io0op",
    group_name: "Android Developers",
    is_moderated: true,
    number_of_users: 34,
    new_messages: 5,
    icon: "http://boo.com/pic.png"
}

2-й метод доступа GET позволяет получить сводную информацию, которая по своей природе является более статистической, например:

{ 
    group_id: "5t7yu8i9io0op",
    top_ranking_users: {
      [ { user: "george", posts: 789, rank: 1 }, 
        { user: "joel", posts: 560, rank: 2 }  ...]
    },
    popular_topics: {
      [ ... ]
    }
}

Я хочу разделить эти методы доступа к данным, и в настоящее время я планирую этот дизайн:

GET /group/:group_id/
GET /group/:group_id/stat

Только последний вернет статистическую информацию о группе. Что вы думаете об этом?

Ответы [ 2 ]

5 голосов
/ 30 марта 2010

Я не вижу проблем с вашим подходом. Поскольку статистика в основном представляет собой отдельные данные, вы также можете рассматривать статистику как отдельный ресурс, предоставляя URI, такой как

GET /stat/:group_id

Кроме того, вы можете перекрестно ссылаться на свои ресурсы (то есть групповые ссылки на соответствующий ресурс статистики и наоборот):

GET /group/5t7yu8i9io0op

{ 
    group_id: "5t7yu8i9io0op",
    group_name: "Android Developers",
    is_moderated: true,
    number_of_users: 34,
    new_messages: 5,
    icon: "http://boo.com/pic.png",
    stats: "http://mydomain.com/stat/5t7yu8i9io0op"
}

GET /stat/5t7yu8i9io0op

{ 
    group: "http://mydomain.com/group/5t7yu8i9io0op",
    top_ranking_users: {
      [ { user: "george", posts: 789, rank: 1 }, 
        { user: "joel", posts: 560, rank: 2 }  ...]
    },
    popular_topics: {
      [ ... ]
    }
}
4 голосов
/ 30 марта 2010

Что было бы еще лучше, если бы вы ввели в статистику группы ссылку на статистику:

{ 
    group_id: "5t7yu8i9io0op",
    group_name: "Android Developers",
    is_moderated: true,
    number_of_users: 34,
    new_messages: 5,
    icon: "http://boo.com/pic.png"
    stats_link : "http://whatever.who/cares"
}
...