Nel confrontare la struttura REST [api] con un modello OO, vedo queste somiglianze:
Tutti e due:
Sono orientati ai dati
- REST = Risorse
- OO = Oggetti
Operazione surround attorno ai dati
- REST = circondare VERBI (Ottieni, Posta, ...) attorno alle risorse
- OO = promuove l'operazione attorno agli oggetti mediante incapsulamento
Tuttavia, le buone pratiche di OO non si basano sempre sulle API REST quando si tenta di applicare il modello di facciata ad esempio: in REST, non si dispone di 1 controller per gestire tutte le richieste E non si nasconde la complessità degli oggetti interni.
Al contrario, REST promuove la pubblicazione di risorse di tutte le relazioni con una risorsa e altre su almeno due forme:
tramite le relazioni della gerarchia delle risorse (un contatto di id 43 è composto da un indirizzo 453):
/api/contacts/43/addresses/453
tramite collegamenti in una risposta json REST:
>> GET /api/contacts/43 << HTTP Response { id: 43, ... addresses: [{ id: 453, ... }], links: [{ favoriteAddress: { id: 453 } }] }
Tornando a OO, il modello di progettazione della facciata rispetta a Low Coupling
tra un oggetto A e il suo " client oggetto B " e High Cohesion
per questo oggetto A e la sua composizione interna dell'oggetto (oggetto C , oggetto D ). Con l' interfaccia objectA , ciò consente a uno sviluppatore di limitare l'impatto sull'oggetto B delle modifiche interne dell'oggetto A (in oggetto C e oggetto D ), purché l' oggetto Api (operazioni) sia ancora rispettato.
In REST, i dati (risorsa), le relazioni (collegamenti) e il comportamento (verbi) sono esplosi in diversi elementi e disponibili per il web.
Giocando con REST, ho sempre un impatto sulle modifiche del codice tra il mio client e il server: perché ho High Coupling
tra le mie Backbone.js
richieste e Low Cohesion
tra le risorse.
Non ho mai capito come lasciare che il mio Backbone.js javascript application
patto con la scoperta di " risorse e funzionalità REST " sia promosso dai link REST. Comprendo che il WWW è pensato per essere servito da più server e che gli elementi OO dovevano essere sfruttati per essere serviti da molti host, ma per uno scenario semplice come "salvare" una pagina che mostra un contatto con i suoi indirizzi, Finisco con:
GET /api/contacts/43?embed=(addresses) [save button pressed] PUT /api/contacts/43 PUT /api/contacts/43/addresses/453
che mi ha portato a spostare l'azione di salvataggio della responsabilità transazionale atomica sulle applicazioni del browser (poiché due risorse possono essere indirizzate separatamente).
Con questo in mente, se non riesco a semplificare il mio sviluppo (modelli di progettazione della facciata non applicabili) e se porto più complessità al mio cliente (gestendo il salvataggio atomico transazionale), qual è il vantaggio di essere RESTful?
PUT /api/contacts/43
cascata degli aggiornamenti agli oggetti interni? Ho avuto molte API progettate in questo modo (l'URL principale legge / crea / aggiorna il "tutto" e gli URL secondari aggiornano i pezzi). Assicurati solo di non aggiornare l'indirizzo quando non sono necessarie modifiche (per motivi di prestazioni).