2010-10-08 14 views
13

Aprendí el término "RESTful" como desarrollador de Rails. Después de leer wikipedia, también here y here.Dame un ejemplo de diseño no RESTful?

No lo entiendo. Me parece, los carriles solamente utiliza una concisa forma para describir las direcciones URL. Me parece que cada URI es RESTful, en su diseño scope.

Por ejemplo, creo que GET /delete?student_id=3 es RESTful en el alcance de la aplicación en sí.

¿Puede alguien decirme lo que constriñen ¿Viola? Por favor, consulte la constricción del REST definition.

Respuesta

15

Una solicitud GET debe ser idempotent y la solicitud no debe dejar ningún efecto secundario en el servidor. Citando el HTTP spec sec 9.1.1:

En particular, la convención se ha establecido que los métodos GET y HEAD no deben tener la importancia de tomar una acción que no sea la recuperación. Estos métodos deben considerarse "seguros". Esto permite que los agentes de usuario para representar otros métodos, tales como POST, PUT y DELETE, de una manera especial, de modo que el usuario sea consciente del hecho de que se está solicitando una acción posiblemente inseguro.

Por lo tanto GET /delete?student_id=3 ya se viola el supuesto idempotencia del GET verbo, ya que eliminar un registro en el servidor.

Una interfaz RESTful es una interfaz uniforme, lo que significa que se supone que un GET se comporta como lo requieren las especificaciones HTTP. Y esto es lo que the spec says: significa

El método GET recuperar cualquier información (en forma de una entidad ) se identifica por el Request-URI. Si el Request-URI se refiere a un proceso de producción de datos, es los datos producidos que se devueltos como la entidad en la respuesta y no el texto fuente del proceso , a menos que el texto pasa a ser la salida de la proceso.

...

+2

Viola las especificaciones HTTP. No es la especificación REST. – Cheng

+0

@Cheng: Sí, no debería violar las especificaciones HTTP. Ya no es una interfaz uniforme si no se ajusta a algunas especificaciones. –

+0

@Daniel Vassallo +1 aunque probablemente debería reformularse como "Una solicitud GET debe ser idempotente/y la solicitud no debe dejar ningún efecto secundario [...]". PUT es idempotente también, pero tiene efectos secundarios. – Bruno

1

un GET debe ser seguro para ser REST, pero, obviamente, combinado con una eliminación no es seguro.

por lo que parece REST pero no actúa REST. Por lo tanto, falla el duck test.

7

Me parece que Rails solo está utilizando una forma concisa para describir las URL. Parece a mí cada URI es REST, en la que es alcance diseñado.

Los URI no son RESTful ni RESTful. REST es un estilo arquitectónico para el que debe tener en cuenta la aplicación general.

GET es el método para la solicitud de recuperación. Si desea poner esto en el contexto de la disertación REST, si su solicitud GET tiene efectos colaterales, romperá algunas otras restricciones, por ejemplo, con respecto a la caché.

También podría diseñar un sistema RESTful donde una solicitud GET /delete?student_id=3 le ofrezca una representación indicándole (o pidiéndole que confirme) que desea eliminar ese alumno, siempre que en realidad no realice la operación de eliminación.

2

Ver la Sección 5.1.5. Su ejemplo infringe la restricción de interfaz uniforme. Lo hace violando las especificaciones HTTP.

Cuestiones relacionadas