2009-07-08 19 views
34

Estoy construyendo mi propio sitio web Ajax, y estoy contemplando entre REST y RPC.REST vs. RPC en PHP

Si mi servidor admite Servlets, simplemente instalaría persevere y terminaría el problema, pero mi servidor no admite Servlets.

RPC es más simple de codificar (IMO) y se puede escribir en PHP fácilmente. Todo lo que necesito es un ejecutador de consulta de base de datos. Estoy usando el Dojo Toolkit y JSON.

¿Por qué debería elegir REST sobre RPC o RPC sobre REST?

+1

no puede entender por qué se stackoverflow masivamente cerrando control de calidad del que han tenido gran impacto. – minghua

Respuesta

21

Uhm ... para ponerlo simple, ambos son modelos muy abstractos ... tan abstracto, que se producen de forma natural en todas partes ...

REST es la idea de que los recursos se dirigió con un identificador global (el URI en el caso de HTTP) que se accede de manera CRUD (usando POST, GET, PUT y DELETE en el caso de HTTP ... bueno, al menos esa es la idea) ...

RPC es la idea de dónde llama un procedimiento en una máquina diferente, pasa algunos parámetros y toma un valor de retorno ...

There is a nice short comparison on Wikipedia

Persevera crea un servicio, que permite tanto (de una manera muy elegante, es cierto) ... es RESTful (aunque no sólo se utilizan HTTP-características para lograr esto) y expone una interfaz RPC ...

Al final, debe ver lo que su aplicación necesita hacer ... como la mayoría de las personas, probablemente terminará con una API RPC (ya sea basada en XML o JSON o lo que sea), que incluye una capa de transporte para un subsistema parcialmente RESTful ... esto es, porque tener RESTfulnes, significa flexibilidad ... si el cliente puede recorrer más o menos libremente los datos en el servidor (a través de un conjunto de CRUD simples) thods), no depende de un conjunto de métodos limitados (específicos del problema) expuestos a través de la API, y puede cambiar la lógica clientwards ...

+25

REST no tiene nada que ver con CRUD. – aehlke

+8

Uno puede ser perdonado por pensar en REST en términos de CRUD. Es un malentendido común. Aquí está la explicación: "... al descartar el mapeo CRUD (Crear, Recuperar, Actualizar, Eliminar) de GPPD (GET, POST, PUT, DELETE) puede usar REST de la manera que se suponía que debía usarse. No hay nada de malo con el uso de un POST para eliminar, actualizar o crear recursos, siempre y cuando esté POSTING en el recurso adecuado ". - de http://blog.jonnay.net/archives/642-REST-!-CRUD!.html –

+0

Su enlace contiene malentendidos de REST, desafortunadamente, que marte su mensaje. Si desea eliminar recursos, no debe especificar ID: debe especificar los URI de los recursos que se eliminarán. – aehlke

55

La mejor manera de entenderlo es leer la disertación de Roy T. Fielding en él, o artículos relevantes en su blog donde discute las diferencias entre REST puro y simplemente arquitecturas RPC.

Otra cosa a tener en cuenta es que el artículo de Wikipedia sobre REST está en pésima condición y el propio Fielding, el "inventor" de REST, sugiere que el artículo es inexacto.

Lo más importante que las personas extrañan con REST es la capacidad de descubrimiento: los recursos deben incluir URI para otros recursos relacionados dentro de su hipertexto, en lugar de basarse en las convenciones de nomenclatura de URI, que están fuera de banda y no estandarizadas.

Un gran problema con las implementaciones populares de RPC como SOAP o XML-RPC es que usan HTTP debajo de su propia arquitectura propietaria, en lugar de aprovechar todas las diferentes propiedades de HTTP como PUT, GET, DELETE, etc. También se ajusta a la pila web tradicional: un servidor de caché en el medio no funciona, por ejemplo, sin conocer el significado de los contenidos de la llamada RPC.

Esta es una introducción incompleta a REST y RPC pero creo que he resaltado algunos de los puntos importantes que a menudo se pasan por alto. Tenga cuidado, ya que hay MUCHA información incorrecta en REST.

Dicho esto, REST no es para todo. Es una arquitectura, por lo que es bastante flexible cómo puede implementarlo. Pero si no tiene sentido acceder a las cosas principalmente como recursos, entonces REST puede no ajustarse, o puede que solo se ajuste a partes de su aplicación, lo cual está bien.

+0

El controlador de hipermedia ayudó significativamente a la detección de los servicios de descanso. – Amir

+6

Desea señalar que lo que usted llama "un gran problema con RPC popular" también puede ser una gran ventaja, dependiendo de cuáles sean sus objetivos. Si confía en los verbos de acción de HTTP, ahora está vinculado a HTTP. En muchas arquitecturas de sistema, puede ser deseable realizar llamadas RPC a través de una variedad de mecanismos de transporte diferentes (HTTP, sockets, colas de mensajes, etc.).A menudo, nuestra elección de HTTP tiene más que ver con su ubicuidad que con ser el protocolo de transporte ideal (consulte la gran cantidad de soluciones de navegador para hacer un túnel a través de HTTP, por ejemplo, BOSH). Solo hay que considerar muchas concesiones. – DougW

+0

@DougW, absolutamente cierto. Hay formas de usar REST sin HTTP pero no sé sobre un RESTO independiente del protocolo. – aehlke

5

Hay tres estilos diferentes de servicios:

  • RPC API - el cliente envía un procedimiento y parámetros de servicio y el servicio es responsable de la ejecución de la orden y devolver un resultado.
  • Message API (Document API) - el cliente envía DOM (elementos), que normalmente son estructuras más complejas que las llamadas a la API RPC, porque tienden a no implicar operaciones directamente.
  • API de recursos - se utiliza para acceder a recursos (tuplas de bases de datos, archivos, imágenes, etc.). En general, también debería proporcionar una buena negociación del tipo de medio.

SOAP y REST son compilación de las normas de W3C, y la principal diferencia es que el jabón utiliza HTTP, SMTP y el protocolo de transporte, etc. y REST utiliza como protocolo de aplicación, también conocido como debería apoyar (GET, PUT, PUSH, DELETE y POST). SOAP también implica el uso de XML y REST podría usar cualquier tipo de datos (JSON, XML, HTTP, etc.). Además, una de las principales ventajas de SOAP es el Descriptor de servicio (archivo WSDL), que brinda la posibilidad de autogeneración de Service Connector (proxy) al cliente.

No hay un silver bullet; el tipo y la arquitectura de un servicio web dependen de los requisitos reales del cliente y la tecnología.

Para tener una idea general sobre el tema, consulte uno de los libros de la firma Martin Fowler - Service Design Patterns

+0

Puede documentar servicios REST utilizando WSDL 2.0 o WADL http://rest.elkstein.org/2008/02/documenting-rest-services-wsdl-and-wadl.html – icc97