2010-03-30 7 views
3

J'ai un scénario dans lequel j'ai API REST qui gère une ressource que nous appellerons Groupe. Un groupe est similaire dans son concept à un forum de discussion dans Google Groupes.REST api design pour récupérer des informations de résumé

Maintenant, j'ai deux méthodes d'accès GET qui, selon moi, nécessitent des représentations séparées.

La première méthode d'accès GET récupère la quantité minimale d'informations sur un groupe. donné une group_id il doit renvoyer une quantité minimale d'informations comme

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

La 2ème méthode d'accès GET retrives informations sommaires qui sont plus statistiques dans la nature comme:

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

Je veux séparer ces méthodes d'accès aux données et je suis en train de planifier sur cette conception:

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

Seulement Ce dernier renverra les informations statistiques sur le groupe. Que penses-tu de cela ?

Répondre

5

Je ne vois pas de problème avec votre approche. Étant donné que les statistiques sont données essentiellement distinctes, vous pouvez traiter les statistiques comme une ressource à part, aussi, fournir un URI comme

GET /stat/:group_id 

De plus, vous pouvez traverser référencer vos ressources (ce qui signifie un lien de groupe à la ressource stat correspondante et vice versa):

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

Ce qui serait encore mieux serait si vous avez intégré le lien vers les statistiques dans le résumé du groupe:

{ 
    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" 
} 
Questions connexes