2010-06-06 15 views
6

¿Cómo se debe implementar correctamente un generador de números aleatorios en REST?REST: obtenga un número aleatorio GET o POST?

GET RANDOM/ 

o ..

POST RANDOM/ 

el servidor devuelve un número aleatorio diferente cada vez.

Veo argumentos en ambos sentidos.

+2

digo GET, ¿qué argumentos tiene usted para publicar? Obtener un número aleatorio no crea nada del lado del servidor ni efectos secundarios? – Mic

+0

Técnicamente sí modifica el estado del servidor ... Pero si lo miras así, * cada * solicitud de cualquier tipo debe estar detrás de un POST, ya que todos modifican algo, trivial o no: P (No lo recomiendo) – Jeriko

Respuesta

7

Yo diría que esto es lo mismo que para una página devuelta que contiene la hora actual, y muchas de ellas se hacen usando GET. De manera abstracta, al buscar un número aleatorio (o tiempo), el estado del servidor no cambia: tanto el tiempo como los números aleatorios se pueden describir como una observación de un evento externo. P.ej. http://random.org usa el ruido atmosférico.

GET parece el más apropiado, aunque el almacenamiento en caché deberá deshabilitarse mediante los encabezados adecuados, p.

Expires: <Current Time> 
Last-Modified: <Current Time> 
Cache-Control: no-cache, must-revalidate 
Pragma: no-cache 

Si desea asegurarse de que el contenido servido ya ha caducado:

Para marcar una respuesta como "ya expiró," un servidor de origen envía un Expira fecha que es igual a la Fecha valor del encabezado. (Ver las reglas para cálculos de caducidad en la sección 13.2.4.)

+2

¿Podría establecer la fecha de vencimiento antes de la hora actual? –

2

Definitivamente GET. Aunque podría modificar el estado del servidor (si usa un pseudo-RNG), eso es solo un detalle de implementación que al cliente no le debería importar.

-3
  • definición de REST-call con GET: el resultado debe ser el mismo -> not GET.
  • definición de REST-llamada con PUT: el resultado de la llamada puede ser repetible, el servidor no debería tener problema con él -> utilización PUT

POST es el método más débil y puede utilizarse si otros no lo son útil.

Por qué no conseguir: el resultado de GET-llamada puede ser cachet (caché de cabecera, oder etag proxies transparentes) y usted no obtendrá resultados al azar ...

+0

Pero puede desactivar el almacenamiento en caché utilizando los encabezados apropiados. – erikkallen

+4

REST no dice que GET siempre debe responder con la misma respuesta del mismo URI. La respuesta debe representar el mismo recurso, pero los contenidos pueden cambiar horas extras. –

+0

@Darrel: tienes razón. Una solicitud GET no modifica el recurso de todos modos, ¡en el tiempo en vivo puede cambiar el re-recurso! –