8 Replies
  1. 59

    Roy Fielding blog con una certa frustrazione su Rpc masquerading come RESTO.

    RESTO richiede l’utilizzo di un ipertesto, che scala molto bene in quanto il client e il server sono molto debolmente accoppiati. Con il RIPOSO, il server è libero di cambiare l’esposto risorse a volontà. Non esiste una API di sopra e al di là di ciò che il RESTO stesso definisce. Il client deve conoscere solo l’iniziale URI, e successivamente sceglie dal server fornito scelte per navigare o eseguire azioni. Un server può scaricare il codice per il client che aiuta nella navigazione di stato e di rappresentanza.

    Tutto questo è in netto contrasto con le varie chiamate di procedura remota (RPC) gli schemi in cui il client che il server devono concordare un protocollo dettagliato che in genere deve essere compilato in entrambe le estremità (ad esempio Uri di una particolare forma di accedere in un ordine particolare, a un estremo, SOAP/WSDL/WS* all’altro). Questo approccio è fragile, perché i cambiamenti attuati sul server e client i lati allo stesso tempo. Si diventa rapidamente insostenibile come il numero di server e/o client cresce. Server, in particolare, soffrono perché l’evoluzione dell’pubblicato API diventa progressivamente più difficile all’aumentare della popolarità.

    Alla luce di questi fattori, il RESTO è sempre la scelta migliore, quando è possibile. Esso consente la rapida evoluzione di server e consente un numero astronomico di applicazioni di interagire liberamente su una base ad hoc (ad es. Internet).

    Ma per quanto riguarda il “quando è possibile” parte? RESTO funziona al meglio quando c’è un essere umano nel ciclo. Dopo tutto, un essere umano ha una buona probabilità di essere in grado di fare una scelta razionale, quando sono presentati con un precedentemente sconosciuto serie di opzioni. Le macchine non sono ancora arrivati. Web RPC protocolli sono nati proprio per manette entrambi i lati di un protocollo fisso. Questo rende più facile per i processi automatizzati per comunicare quando l’umano viene rimosso dalla foto. RPC è una valida scelta di design quando puramente funzionamento automatizzato è più importante di evoluzione e di scalabilità (in tempo di Internet e su Internet in scala).

    Scala e di Accoppiamento?

    “Scala” è qui inteso in senso lato. Esso include numeri di utenti e sessioni, sì, ma anche nella dimensione dell’applicazione e il processo di sviluppo. Accoppiamento stretto presenta un grave impedimento alla dimensione dell’applicazione. È difficile immaginare l’esistenza di una grande applicazione, il World-Wide Web, senza la necessità di un accoppiamento accordata dal RESTO dell’architettura. Milioni di sviluppatori in tutto il mondo hanno collaborato per creare questa applicazione che supporta miliardi di utenti. Ma gli sviluppatori non questo continuando beatamente ignari l’uno dell’altro (o almeno si sarebbe non essere a conoscenza di ogni altro, se non fosse per StackOverflow ;).

    Il fondamentale principio di RIPOSO è ipertesto. Gli altri elementi dell’architettura esiste sostenere che il principio in scala molto grande (in ogni senso). È del RESTO l’unico modo concepibile che il Web potrebbe essere stato costruito? No. Ma capita di essere successo selvaggiamente standard de facto. Dovrebbe essere la scelta di default per ogni nuovo ingresso nell’ecosistema, scartato solo dopo un’attenta ed esplicita la progettazione considerazione.

    • Come sono scale e giunto correlati? RESTO architetture di scala a causa di strati di architettura e la memorizzazione nella cache. L’accoppiamento consente ai componenti di evolvere. Il RESTO non è sempre la scelta migliore. Se ho due server in un data center dove ho il controllo di entrambi e di cui hanno bisogno per fare le transazioni distribuite tra di loro, poi il RESTO non è l’approccio migliore. A prescindere da questi problemi, si fanno un po ‘ di punti.
    • Grazie per il gentile commento. Ho aggiunto il Scala e di Accoppiamento? sezione di un tentativo di chiarimento.
    • Anche quando non c’è un essere umano nel ciclo, come sono i client dovrebbe riprogettare se stessi al volo quando le modifiche alle API? È insolito avere un client REST che ha qualsiasi hard-coded forme e i pulsanti? Sono tutti RESTO clienti che generano la loro intera interfaccia utente in modo dinamico?
    • Un tipico agente utente ha poco hard-coded UI: indirizzo bar, pulsante indietro, aggiornamento, etc. Tutto il resto è generato dinamicamente dal server fornito rappresentazione. Vedere, per esempio, il Interfaccia Uniforme e Codice Su Richiesta vincoli nella sezione 5.1 del Fielding RESTO della tesi. In una machine-to-machine interaction, questi vincoli sono spesso troppo onerosi (AI anyone?). Gli esseri umani sono meglio di adattamento agli imprevisti cambiamenti di interfaccia. Nulla ci impedisce di ignorare il RESTO e tunnelling un’API su HTTP (il cosiddetto “RESTful API”, forse più stile “Inquieto” 🙂
    • quindi in questo caso l’argomento per il RESTO dal punto di vista del server? I. e. un Restful API richiedono meno manutenzione da serverside devs quando l’aggiornamento delle risorse, dal momento che teoricamente tali risorse gli endpoint di aggiornare automaticamente se un Riposante per l’architettura è stato rigorosamente rispettato?
    • Penso che il vantaggio è per l’intero ecosistema. Come utente, posso (con una buona approssimazione) sedersi di fronte a qualsiasi browser su qualsiasi computer in qualsiasi punto del pianeta e ottenere la stessa esperienza di applicazione. Come server dev, non ho bisogno di preoccuparsi di fare qualsiasi rottura modifiche delle API, perché non c’è pubblico API di pausa (e io sono in controllo di entrambe le estremità di ogni privati API tra il mio server e codice servita su richiesta per l’user agent).
    • Grazie @WReach. Io non sono sicuro di capire che… per il cliente, la mia sensazione è che si potrebbe ancora richiedere la navigazione riposante risorsa o la lettura di documenti per capire cosa richiesta. E non so cosa si intende per there is no public API to break. Stai dicendo che l’API pubblica è in realtà un livello che corrisponde alle tue risorse? Che cosa si intende per codice servita su richiesta per l’user agent
    • Continuiamo questa discussione in chat.

  2. 6

    Utilizzando RESTO correttamente può aiutare il vostro sistema componenti rimangono correttamente disaccoppiati e può essere sviluppata in modo più facilmente in futuro rispetto a se è legato direttamente insieme in un tipico RPC-come la moda. E ‘ una scelta architettonica che è necessario in base alle esigenze dell’applicazione. Altri hanno notato alcuni dei vantaggi tecnici, e dovrebbero essere presi in considerazione.

  3. 5

    RESTO permette una facile evoluzione di una progettazione di API. E che è la chiave con un RIPOSO – si sta creando una API. Alcuni commenti hanno toccato aspetti di questo pensiero, ma non hanno in realtà portato la questione fondamentale per la vita. Quando hai a che fare con il RIPOSO, la creazione di un’API che potrebbe essere utilizzato da clienti (o voi stessi). HTTP azioni di risorse per dare una chiara indicazione per i clienti e la progettazione di API e funzionalità. Pertanto, quando si utilizza il corretto HTTP verbi correttamente, ci sono la dichiarazione di un’API che è standardizzato e comprensibile da un punto di vista client.

  4. 3

    Se il tuo GET richieste non sono idempotente quindi la memorizzazione nella cache HTTP tra il server e i client pausa la vostra applicazione. POST richieste sono, per definizione, non idempotente, così HTTP cache non memorizza nella cache le richieste e risultati: è ancora ottenere i benefici della cache GET richieste, senza rompere l’applicazione del protocollo. Un grande successo.

    E, se avete bisogno di eliminare gli oggetti, DELETE sarà molto più facile da leggere sul filo e registri di un POST richiesta che non l’eliminazione. Ma i browser web non può facilmente effettuare richieste HTTP con il DELETE verbo, così è davvero più per i clienti in cui hai programmato di te.

  5. 3

    Scoperta è molto più facile nel RESTO. Abbiamo WADL documenti (simile al WSDL tradizionale webservices), che vi aiuterà a pubblicizzare il vostro servizio al mondo. È possibile utilizzare UDDI scoperte. Con i tradizionali HTTP POST e GET persone non possono sapere il tuo messaggio di richiesta e di risposta gli schemi di chiamata.

  6. 2

    Si dovrebbe usare il RESTO, perché è davvero comprende tutte le potenziali azioni che vuoi fare su una risorsa/oggetto.

    • GET – Recuperare una risorsa basata su condizioni
    • POST – creare una risorsa
    • METTERE – aggiornamento di una risorsa con il dato aggiornato attributi
    • Elimina – per ELIMINARE una risorsa

    Un altro motivo è che si tratta di uno standard che tutti possono implementare e utilizzare. A leggere sul perché la standardizzazione è importante, vorrei suggerire la lettura di questo e questo (è piuttosto divertente, ma in realtà aiuta le persone a cogliere il concetto di RIPOSO).

    • NON è uno standard W3C.
    • POST e PUT non mappa per Creare e Aggiornare. A volte lo fa. Ma non c’è niente di sbagliato con la creazione di nuove risorse con una PUT se pensate che il problema meglio. Tuttavia, la richiesta deve essere sicuro di ripetere (idempotente), e se è che si dovrebbe usare MESSO, non POSTARE. Al contrario, se la richiesta di aggiornamento non è sicuro di ripetere, non si dovrebbe usare il POST, non METTERE.
  7. 2

    Si dovrebbe usare il RESTO, perché al di sotto di caratteristiche e vantaggi:

    Caratteristiche

    1. Stateless protocollo client/server: Ogni HTTP contiene tutte le informazioni necessarie per l’esecuzione, il che significa che né il cliente né il server ha bisogno di ricordare qualsiasi precedente stato di soddisfarlo. Sia come sia, alcune applicazioni HTTP incorpora una cache di memoria. In questo modo si configura ciò che è noto come l’apolide client-cache-protocollo del server: è possibile definire alcune risposte a specifiche richieste HTTP cacheable, in modo che il client può eseguire la stessa risposta per richieste identiche in futuro. Tuttavia, il fatto che esiste l’opzione non significa che è il più raccomandato.
    2. Ci sono quattro dati molto importanti operazioni in qualsiasi RESTO di sistema e specifiche HTTP: POST (creare), GET (lettura e consultazione), PUT (modifica) e DELETE.
    3. Oggetti nel RESTO sono sempre manipolati dall’URI. È l’URI e nessun altro elemento che è l’unico identificatore di ogni risorsa di questo sistema RIPOSO. L’URI ci permette di accedere alle informazioni, al fine di modificare o eliminare, o per esempio per condividere la sua esatta posizione e con i terzi.
    4. Interfaccia uniforme: per il trasferimento di dati, il RESTO si applica il sistema di azioni specifiche (POST, GET, PUT e DELETE) le risorse, a condizione che siano identificati con un URI. Questo rende più facile per ottenere un’interfaccia uniforme che sistematizza il processo con le informazioni.
    5. Livello di sistema: architettura gerarchica tra i componenti. Ogni strato ha una funzionalità all’interno del sistema RIPOSO.
    6. Uso di ipermedia: ipermedia è un termine coniato da Ted Nelson nel 1965 ed è un’estensione del concetto di ipertesto. Questo concetto, preso per lo sviluppo della pagina web, è ciò che permette all’utente di visualizzare il set di oggetti attraverso i link HTML. Nel caso di una API REST, il concetto di ipermedia spiega la capacità di sviluppo di applicazioni di interfaccia per fornire il cliente e l’utente con adeguati collegamenti per eseguire azioni specifiche sui dati.

    Vantaggi

    1. Separazione tra il client e il server: il RESTO protocollo totalmente separa l’interfaccia utente dal server e di archiviazione di dati. Questo ha alcuni vantaggi quando si effettua sviluppi. Per esempio, migliora la portabilità dell’interfaccia per altri tipi di piattaforme, aumenta la scalabilità dei progetti e delle diverse componenti degli sviluppi a essere evoluta in modo indipendente.
    2. Visibilità, affidabilità e scalabilità. La separazione tra il client e il server ha un vantaggio evidente, e cioè che ogni team di sviluppo in grado di scalare il prodotto senza troppi problemi. Essi possono migrare in altri server o fare tutti i tipi di modifiche nel database, a condizione che i dati da ogni richiesta è stata inviata correttamente. La separazione è più facile avere l’anteriore e il posteriore su server diversi, e questo rende l’app più flessibile per lavorare con.
    3. Il RESTO API è sempre indipendente dal tipo di piattaforma o di lingue: l’API REST sempre si adatta al tipo di sintassi o di piattaforme di essere usato, che conferisce una notevole libertà quando si modifica o la sperimentazione di nuovi ambienti di sviluppo. Con una API REST si può avere PHP, Java, Python o Node.js server. L’unica cosa è che è indispensabile che le risposte alle richieste che dovrebbe avvenire sempre nel linguaggio utilizzato per lo scambio di informazioni, di norma XML o JSON.

    Fonte

  8. 2

    Perché pensi solo tramite POST e GET significa che non RESTO?

    Il punto di RIPOSO che ogni “risorsa” è un identificatore di risorsa, di un URI. Ogni URI potenzialmente ha GET, POST, PUT, DELETE.

    • OTTENERE è di leggere
    • POST è in aggiornamento
    • METTERE è creare
    • ELIMINARE eliminare

    Se non stai facendo alcune di quelle cose che-come la METTI è una specie di raro e di un potenziale problema di sicurezza, quindi non.

    • Cercando di mappa POST e METTERE per aggiornare e creare davvero non funziona. Io sono d’accordo però che il RESTO non richiede l’uso di tutti i metodi, si dice solo che se si utilizza uno, assicurarsi che si utilizza correttamente.
    • Penso che sarebbe più corretto dire che il POST è di creare e METTERE è l’aggiornamento.
    • Nessuno è d’accordo su che giro POST e PUT go, che è un buon motivo per non abusare HTTP in questo modo, IMO.

Lascia un commento