Beim Vergleich der REST [api] -Struktur mit einem OO-Modell sehe ich folgende Ähnlichkeiten:
Beide:
Sind datenorientiert
- REST = Ressourcen
- OO = Objekte
Surround-Betrieb um Daten
- REST = Surround-VERBS (Get, Post, ...) um Ressourcen herum
- OO = Förderung des Betriebs um Objekte durch Kapselung
Gute OO-Praktiken stehen jedoch nicht immer auf REST-APIs, wenn Sie beispielsweise versuchen, das Fassadenmuster anzuwenden: In REST verfügen Sie nicht über einen Controller, der alle Anforderungen verarbeitet, UND Sie verbergen die Komplexität interner Objekte nicht.
Im Gegenteil, REST fördert die Veröffentlichung von Ressourcen aller Beziehungen zu einer Ressource und anderen in mindestens zwei Formen:
über Ressourcenhierarchiebeziehungen (Ein Kontakt mit der ID 43 besteht aus einer Adresse 453):
/api/contacts/43/addresses/453
über Links in einer REST-JSON-Antwort:
>> GET /api/contacts/43 << HTTP Response { id: 43, ... addresses: [{ id: 453, ... }], links: [{ favoriteAddress: { id: 453 } }] }
Zurück zu OO: Das Fassadenentwurfsmuster berücksichtigt a Low Coupling
zwischen einem ObjektA und seinem ' ObjektB-Client ' sowie High Cohesion
für dieses ObjektA und seine interne Objektzusammensetzung ( ObjektC , ObjektD ). Mit dem Objecta Schnittstelle, erlauben diese einen Entwickler zu begrenzen Auswirkungen auf ObjectB der Objecta internen Veränderungen (in ObjectC und ObjectD ), solange die Objecta api (Operationen) sind nach wie vor eingehalten werden .
In REST werden die Daten (Ressource), die Beziehungen (Links) und das Verhalten (Verben) in verschiedenen Elementen aufgelöst und stehen dem Web zur Verfügung.
Wenn ich mit REST spiele, habe ich immer Auswirkungen auf Codeänderungen zwischen meinem Client und meinem Server: Weil ich High Coupling
zwischen meinen Backbone.js
Anforderungen und Low Cohesion
zwischen Ressourcen habe.
Ich habe nie herausgefunden, wie ich mich Backbone.js javascript application
mit der Erkennung von " REST-Ressourcen und -Funktionen " befassen kann , die durch REST-Links gefördert wird. Ich verstehe, dass das WWW von mehreren Servern bedient werden soll und dass die OO-Elemente explodiert werden mussten, um von vielen Hosts dort bedient zu werden, aber für ein einfaches Szenario wie das "Speichern" einer Seite, die einen Kontakt mit ihren Adressen zeigt, Am Ende habe ich:
GET /api/contacts/43?embed=(addresses) [save button pressed] PUT /api/contacts/43 PUT /api/contacts/43/addresses/453
Dies führte dazu, dass ich die atomare Transaktionsverantwortung für die Speicheraktion auf die Browseranwendungen verlagerte (da zwei Ressourcen separat angesprochen werden können).
In diesem Sinne, wenn ich meine Entwicklung nicht vereinfachen kann (Fassadenentwurfsmuster nicht anwendbar) und wenn ich meinem Kunden mehr Komplexität (Umgang mit atomarer Transaktionsspeicherung) bringe, wo ist der Vorteil von RESTful?
PUT /api/contacts/43
wenn die Aktualisierungen innerer Objekte kaskadiert werden? Ich hatte viele APIs wie diese entworfen (Master-URL liest / erstellt / aktualisiert das "Ganze" und Sub-URLs aktualisieren die Teile). Stellen Sie einfach sicher, dass Sie die Adresse nicht aktualisieren, wenn keine Änderungen erforderlich sind (aus Leistungsgründen).