2009-07-08 6 views
34

Sto costruendo il mio sito web Ajax e sto considerando tra REST e RPC.REST vs. RPC in PHP

Se il mio server supportava Servlet, installavo semplicemente persevere e termina il problema, ma il mio server non supporta Servlet.

RPC è più semplice da codificare (IMO) e può essere scritto in PHP facilmente. Tutto ciò di cui ho bisogno è un executer di query di database. Sto usando il Dojo Toolkit e JSON.

Perché dovrei scegliere REST su RPC o RPC su REST?

+1

non riescono a capire il motivo per cui StackOverflow è massicciamente chiudendo QA di che hanno avuto grande impatto. – minghua

risposta

21

Uhm ... Per dirla semplice, entrambi sono modelli molto astratti ... così astratto, che si trovano naturalmente in tutto il mondo ...

REST è l'idea di avere risorse affrontato con un identificatore globale (l'URI nel caso di HTTP) alle quali si accede in modo CRUD (usando POST, GET, PUT e DELETE nel caso di HTTP ... bene, almeno questa è l'idea) ...

RPC è l'idea dove si chiama una procedura su una macchina diversa, passando alcuni parametri e prendendo un valore di ritorno ...

There is a nice short comparison on Wikipedia

Perseverate crea un servizio, che consente sia (in un modo molto elegante, è vero) ... è RESTful (anche se non solo utilizzare HTTP-caratteristiche per raggiungere questo obiettivo) e espone un'interfaccia RPC ...

Alla fine, dovresti vedere cosa deve fare la tua applicazione ... come molte persone, probabilmente finirai con un'API RPC (sia essa basata su XML o JSON o qualsiasi altra cosa), che include un livello di trasporto per un sottosistema parzialmente RESTful ... questo perché, avendo RESTfulnes, significa flessibilità ... se il cliente può più o meno attraversare liberamente i dati sul server (attraverso una serie di semplici CRUD me thods), non dipende da una serie limitata di problemi esposti attraverso l'API, e puoi spostare la logica client ...

+25

REST non ha nulla a che fare con CRUD. – aehlke

+8

Si può essere perdonati per aver pensato a REST in termini di CRUD. È un malinteso comune. Ecco la spiegazione: "... eliminando il mapping CRUD (Crea, Recupera, Aggiorna, Elimina) da GPPD (GET, POST, PUT, DELETE) puoi utilizzare REST come dovrebbe essere usato. con l'utilizzo di un POST per eliminare, aggiornare o creare risorse, a patto che tu stia eseguendo il POST alla risorsa appropriata. " - da http://blog.jonnay.net/archives/642-REST-!-CRUD!.html –

+0

Il tuo link contiene fraintendimenti di REST, sfortunatamente, che scandiscono il suo messaggio. Se si desidera eliminare le risorse, non si specifica l'ID: si specificheranno gli URI delle risorse da eliminare. – aehlke

55

Il modo migliore per capire è leggere la tesi di Roy T. Fielding su di esso, o articoli pertinenti sul suo blog in cui discute le differenze tra puro REST e semplicemente architetture RPC.

Un'altra cosa da notare è che l'articolo di Wikipedia su REST è in condizioni pessime e Fielding stesso, l '"inventore" di REST, suggerisce che l'articolo è impreciso.

La cosa più grande che la gente manchi di REST è la reperibilità: le risorse dovrebbero includere URI per altre risorse correlate all'interno del proprio ipertesto, invece di basarsi su convenzioni di denominazione URI, che sono fuori banda e non standardizzate.

Un grosso problema con le implementazioni RPC come SOAP o XML-RPC è che usano HTTP sotto la propria architettura proprietaria, piuttosto che sfruttare tutte le diverse proprietà di HTTP come PUT, GET, DELETE ecc. Quindi questo non funziona Si adatta anche allo stack Web tradizionale: un server cache nel mezzo non funziona, ad esempio, senza conoscere il significato dei contenuti della chiamata RPC.

Questa è un'introduzione incompleta a REST e RPC, ma penso di aver evidenziato alcuni dei punti importanti che spesso ci mancano. Fai attenzione, poiché ci sono MOLTE informazioni sbagliate là fuori su REST.

Detto questo, REST non è per tutto. È un'architettura, quindi è piuttosto flessibile come è possibile implementarlo. Ma se non ha senso accedere alle cose principalmente come risorse, allora REST potrebbe non adattarsi, o potrebbe adattarsi solo a parti della tua applicazione, il che va bene.

+0

Il controller ipermediale ha contribuito in modo significativo alla rilevabilità dei servizi di assistenza. – Amir

+6

Desidero sottolineare che ciò che chiami "un grosso problema con il popolare RPC" può anche essere un grande vantaggio, a seconda di quali sono i tuoi obiettivi. Se ti affidi ai verbi di azione di HTTP, ora sei legato a HTTP. In molte architetture di sistema, potrebbe essere opportuno effettuare chiamate RPC su una varietà di diversi meccanismi di trasporto (HTTP, socket, code di messaggi, ecc.).Spesso la nostra scelta di HTTP ha più a che fare con la sua ubiquità di quanto non sia in realtà il protocollo di trasporto ideale (vedi la miriade di soluzioni browser per fare il tunneling di cose via HTTP, ad esempio BOSH). Ci sono solo un sacco di compromessi da considerare. – DougW

+0

@DougW, assolutamente vero. Esistono modi per utilizzare REST senza HTTP ma non conosco un REST indipendente dal protocollo. – aehlke

5

Ci sono tre diversi stili di servizi:

  • RPC API - il client invia una procedura e parametri per la manutenzione e il servizio è responsabile per l'esecuzione del comando e restituendo un risultato.
  • API messaggio (API documento) - il client invia DOM (elementi), che normalmente sono strutture più complesse delle chiamate API RPC, poiché tendono a non implicare operazioni direttamente.
  • API di risorse - viene utilizzato per accedere alle risorse (tuple di database, file, immagini e così via). In generale, dovrebbe anche fornire una buona negoziazione del tipo di supporto.

SOAP e REST sono compilazione di norme da W3C, e la differenza principale è che SOAP usa HTTP, SMTP e così via, come protocolli di trasporto e REST utilizza come protocollo applicativo, AKA dovrebbe sostenere (GET, PUT, PUSH, DELETE e POST). SOAP implica anche l'utilizzo di XML e REST può utilizzare qualsiasi tipo di dati (JSON, XML, HTTP, ecc.). Inoltre, uno dei principali vantaggi di SOAP è il Service Descriptor (file WSDL), che offre la possibilità di generare automaticamente il Service Connector (proxy) sul client.

Non c'è un silver bullet; il tipo e l'architettura di un servizio Web dipendono dai reali requisiti del cliente e della tecnologia.

Per un'idea generale sul tema, consultare uno dei libri di firma Martin Fowler - Service Design Patterns

+0

È possibile documentare i servizi REST utilizzando WSDL 2.0 o WADL http://rest.elkstein.org/2008/02/documenting-rest-services-wsdl-and-wadl.html – icc97