Generierung von Hypermedia-links in einem Web-API
Ich bin neugierig, zu wissen, wie andere haben sich mit dem Problem der Generierung von hypermedia-links für Ihre web-APIs? Insbesondere bin ich mit ASP.NET Web-API, und bin hin-und hergerissen zwischen mit Operationen wieder hypermedia-Verwandte Arten, oder die Rückkehr der Ressource selbst, und dass die hypermedia-Sachen später passieren in der pipeline.
Das ist,, die Menschen neigen dazu, Dinge zu tun wie:
public Resource<Order> GetOrder(int id) {
return new Resource<Order>() {
Content = new Order(),
Links = new LinkCollection<Order>() { new AddOrderLink(), new UpdateOrderLink()}
}
Oder etwas mehr wie
public Order GetOrder(int id) { return new Order(); }
Hinzufügen und anschließend hypermedia-links innerhalb einer HttpOperationHandler oder benutzerdefinierte formatter-oder was?
Wenn der Ansatz mehr ist wie #2, wie Sie wissen, welche links zu generieren? Einfach ein paar standard-links, die generiert für alle, Um Objekte? Attribute dekorieren verschiedenen Operationen in OrdersController?
- Nachtrag: ich habe gelesen, über Glenn Block ' s post über hypermedia in Web-API (codebetter.com/glennblock/2012/01/08/...) und zwar scheint er zu Gunsten der Erzeugung der links in Betrieb ist (ähnlich wie in Beispiel 1 oben), fühle ich mich wie der "middleware" route erwähnt er gegen Ende fühlt sich natürlicher an.
- Blick auf die Präsentation von ammy an der teched Neuseeland channel9.msdn.com/Events/TechEd/NewZealand/2013/DEV305 Ihre Lösung ist vielversprechend für hypermedia mit web-api auch hier schauen github-Beispiel-code
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bevorzuge ich option zwei (durch hinzufügen der hypermedia-links unten in der pipeline) und darüber gebloggt, dies zu tun gestern.
War die Lösung zu "bereichern" meine Ressourcen mit hypermedia-links, bevor Sie an den client zurückgegeben wird mit einem message-handler.
Können Sie die Hyprlinkr von github
Ich Plane, verwenden Sie es in meinem nächsten Projekt, da es seens zu nett und einfach zu tun es und Sie können es via nuget-Paket.
In der Beantwortung dieser Frage ist es aufschlussreich, einen Blick auf die ASP.NET MVC-Ansatz zum Umgang mit diesem, da ASP.NET MVC kann gesehen werden, als text - /html-eingeschränkte version der Web-API (manuelle content-negotiation abweichend), und da es offensichtlich stark beeinflusst das design der Web-API.
Grundsätzlich, wir können benutzerdefinierte Formatierer, der die Differenzierung der Darstellungen auf der Grundlage der route oder ein action-Attribut. Dies ist durch die Art und Weise informiert ASP.NET MVC trennt Ansichten von Modellen. In einem ASP.NET MVC-Projekt, ein einzelnes Modell kann dargestellt werden durch verschiedene Vorlagen anzeigen. Jede dieser view-template im wesentlichen "harte codes" transitional links (anchor -, Formular-und link-Elemente) in diesem speziellen Darstellung des Modells. Die Auswahl der Vorlage anzeigen angetrieben wird überwiegend durch übereinkommen (controller und action Namen), kann aber auch hart codiert in der Aktion.
Der Ansicht Motor-und Sicht-Befund convention in ASP.NET MVC kann als eine benutzerdefinierte Web-API-formatter. Dies kann verallgemeinert werden, so dass für jeden unterstützten Medientyp, eine benutzerdefinierte formatter verwendet, route details--und Optional ein Attribut angewendet, um die aufgerufene action-Methode--definieren der Ressourcen-Zustand. (Nach diesem übereinkommen, es gibt nutzen in der Aktion die Namen, die den Zustand der Ressource.) Sobald das Formatierungsprogramm kennt den Zustand der Ressource, die Sie delegieren können, um state-spezifische Formatierung code. In diesem code ist, wo state-spezifische links würde definiert.
Diesem Zustand-spezifische Formatierung code könnte auch delegieren an andere subformatters, viel die gleiche Weise Razor-Ansichten unterstützen die Komposition von partiellen views.
Habe ich meine Lösung hier
Es nutzt class-und property-Attribute in Kombination mit einer ApiController Erweiterung Methode zum füllen eines ResourceLink-Objekts in Ihrer Einheit. Es können auch füllen Sie links für jede Sammlung Eigenschaften. Es ist nicht der fertige Artikel, aber es ist sehr intuitiv und ein guter start.