2012-10-06 7 views
6

Ich versuche, einen RESTful Web-Service zu bauen, der meine Benutzeroberfläche antreiben soll. Wenn ich nach reinen HATEOAS-Prinzipien gehe, sollte ich nur URIs einzelner Ressourcen in Sammlungen offenlegen. Nehmen wir an, ich habe eine Eltern-Kind-Beziehung, und jeder Elternteil kann 50 Kinder haben, und die UI benötigt Teildaten für alle Kinder, die ebenfalls angezeigt werden, wenn auf den Eltern geklickt wird.Pure HATEOAS vs zu viele Serviceanrufe

Wenn ich nur untergeordnete URIs mit dem übergeordneten Element verfügbar mache, muss die Benutzeroberfläche 50 Webdienstaufrufe durchführen, um dies zu erreichen. Der andere Ansatz besteht darin, eine separate API zu haben, die sowohl die Eltern- als auch Teilinformationen über die Kinder und nicht nur die URIs ausgibt. Ich bin mir sicher, dass das ein genug häufiges Problem ist. Was ist das richtige Gleichgewicht hier? Was sind die Fehler? Der "Nur-URI" -Ansatz ist aus einer Entwurfsperspektive sauberer, aber er könnte die Benutzeroberfläche aufgrund all dieser Serviceaufrufe sehr langsam machen und den Server stark belasten. Also könnte der andere Ansatz praktischer sein. Was ist deiner Erfahrung nach besser?

Antwort

5

Sie werden darüber irregeführt, was die Hypermedia-Einschränkung erfordert. Es gibt nichts, das besagt, dass Sie keine Informationen von Ihren untergeordneten Objekten in eine Darstellung des übergeordneten Objekts einschließen können. In der Tat ist genau das Hal (ein Hypermedia-Typ) wurde entwickelt, um zu ermöglichen.

+0

k .. danke! Aber ist es in der Praxis wirklich ein Schmerz, wenn Sie zu viele Anrufe tätigen müssen? –

+1

@ Raze2dust Sie finden die meisten der Verbindungen, die Sie redundant folgen müssen, können sicher privat zwischengespeichert werden. Obwohl sich viele HTTP-Anrufe anfühlen, können die meisten Netzwerk-Round-Trips optimiert werden. Zusammen mit dem Einbetten von Teilen von untergeordneten Ressourcen in die übergeordnete Darstellung können Sie eine sehr netzwerkeffiziente API erstellen. –

+0

Obwohl es Auswirkungen auf die Cachability von Ihnen gibt, verwenden Sie die Einbettung von HAL, als ob Sie keinen Vanilla-HTTP-Cache verwenden könnten. Oder wenn Sie können (ignorieren Sie die Einbettung), dann verwenden Sie den Cache nicht so effektiv. – dietbuddha