Je suis actuellement à la conception de l'API pour une application en PHP, et, à cette fin étudie RESTE raisonnable approche architecturale.
Je crois que j'ai une assez bonne compréhension des concepts clés, mais j'ai du mal à trouver quelqu'un qui a abordé les hiérarchies de supports et de REPOS.
Voici le problème...
Dans la [demande] l'entreprise objet de la hiérarchie, nous avons:
Users
L which have one-to-many Channel objects
L which have one-to-many Member objects
Dans l'application elle-même, nous utilisons un lazy load approche pour remplir l'objet de l'Utilisateur avec les tableaux de ces objets en tant que de besoin. Je crois OO termes c'est l'objet de l'agrégation, mais j'ai vu plusieurs de nommage des incohérences et ne se soucient pas de se lancer dans une guerre sur la convention de nommage .
Pour l'instant, considérez que j'ai quelques faiblement couplées, les objets que je peut / ne peut pas remplir selon l'application.
À partir d'un RESTE point de vue, je suis en train d'essayer de déterminer ce que l'approche devrait être. Voici ma pensée actuelle (compte tenu d'OBTENIR seulement pour le moment):
Option 1 - remplir entièrement les objets:
GET api.example.com/user/{user_id}
Lire l'Utilisateur de l'objet (des ressources) et de retour de l'objet Utilisateur avec tous les Canaux et Membre des objets pré-chargé et codé (JSON ou XML).
AVANTAGES: réduire le nombre d'objets, pas de traversée de l'objet des hiérarchies nécessaires
INCONVÉNIENTS: les objets doivent être entièrement rempli (cher)
Option 2 - remplir l'objet primaire et inclure des liens vers d'autres objets de ressources:
GET api.example.com/user/{user_id}
Lire l'Utilisateur de l'objet (des ressources) et le retour de l'objet Utilisateur données Utilisateur peuplées et les deux listes.
Chaque liste de références appropriées (sous -) c'est à dire des ressources
api.example.com/channel/{channel_id}
api.example.com/member/{member_id}
Je pense que c'est près de (ou exactement) les implications de l'hypermédia, le client peut obtenir les autres ressources si l'on veut (tant que je les marquer sagement).
Avantages: le client peut choisir de charger les subordonnés ou autrement, une meilleure séparation des objets comme les autres ressources
INCONVÉNIENTS: davantage de voyage requis pour obtenir les ressources secondaires
Option 3 - activer récursive récupère
GET api.example.com/user/{user_id}
Lire l'objet Utilisateur et inclure des liens vers des listes de sous-objets, c'est à dire
api.example.com/user/{user_id}/channels
api.example.com/user/{user_id}/members
la /les canaux d'appel de renvoyer une liste de canaliser les ressources dans la forme (comme ci-dessus):
api.example.com/channel/{channel_id}
PROS: ressources primaires exposer où aller pour obtenir de l'subodinates mais pas ce qu'ils sont (plus Reposant?), aucune exigence pour obtenir les subordonnés à l'avant, le subordonné liste des générateurs (et/ou les canaux et /membres) fournissent des interfaces (méthode) rendant la réponse plus service comme.
INCONVÉNIENTS: trois appels à maintenant nécessaire pour remplir entièrement l'objet
Option 4 - (re)considérer l'objet de la conception pour le REPOS
Je suis re-à l'aide de la [existant] objet de l'application de la hiérarchie et en essayant de l'appliquer au REPOS - ou peut-être plus directement, de fournir une API d'interface.
Peut-être le RESTE de la hiérarchie objet doit être différent, ou peut-être la nouvelle Reposante de la pensée est d'exposer les limites de l'objet existant conception.
Toute réflexion sur le dessus de bienvenue.
Merci beaucoup
Paul