Je suis d'essayer d'envelopper ma tête autour de la meilleure façon d'aborder les concepts d'une API REST. Plat ressources qui ne contiennent pas d'autres ressources ne sont pas un problème. Lorsque je suis en cours d'exécution dans les problèmes sont complexes Ressources.
Par exemple, j'ai une ressource pour ComicBook. ComicBook a toutes sortes de propriétés comme l'auteur, le numéro, la date, etc.
Une bande dessinée a également une liste de 1..n couvre. Ces couvercles sont des objets complexes. Ils contiennent beaucoup d'information à propos de la couverture, l'auteur, la date, et même une image encodée en base 64 de la couverture.
Pour un OBTENIR sur ComicBook je pouvais juste de retour de la bande dessinée, et de toutes les couvertures, y compris leurs base64 ed des images. Ce n'est probablement pas une grosse affaire pour l'obtention d'une seule bande dessinée. Mais supposons que je suis la construction d'une application client qui veut faire la liste de toutes les bandes dessinées dans le système dans un tableau. Le tableau contiendra quelques propriétés de la ComicBook de ressources, mais nous ne sommes certainement pas à afficher toutes les couvertures de la table. De retour de 1000 couvertures, chacun avec plusieurs couvre entraînerait une trop grande quantité de données à venir à travers le fil, de données qui n'est pas nécessaire à l'utilisateur final dans ce cas.
Mon instinct est de faire de la Couverture de ressources et de ComicBook contient couvre. Alors maintenant, la Couverture est un URI. OBTENIR sur la bande dessinée fonctionne maintenant, au lieu de l'énorme Couverture de ressources, nous envoyons un URI pour chaque couverture, et les clients peuvent récupérer la Couverture de ressources comme ils en ont besoin.
Maintenant, j'ai un problème avec la création de nouvelles bandes dessinées. Certes, je vais vous voulez créer au moins un abri quand j'ai créer une bande Dessinée, en fait, c'est probablement une règle d'entreprise. Alors maintenant, je suis coincé, je force les clients à appliquer des règles métier par la première soumission d'un Couvercle, l'obtention de l'URI pour cette couverture, puis l'Affichage d'un ComicBook avec URI dans la liste, ou mon POST sur ComicBook prend en un autre à la recherche de Ressources qu'il crache. Les ressources entrants pour le POST et GET sont profondes des copies, où le sortant Obtient contenir des références à des ressources dépendantes.
La Couverture de ressources sera probablement nécessaire en tout cas, car je suis sûr que tant que client, je veux l'adresse Couvre sens dans certains cas. Donc, le problème existe dans une forme générale quelle que soit la taille de la ressource dépendante. En général, comment gérez-vous des Ressources complexes sans forcer le client à juste "savoir" de la manière dont ces ressources sont composées?