¿Existe el servicio web REST del mundo real, que realmente no tiene estado?

REST es la abreviatura de transferencia de estado representativo. Así que “verdaderamente apátrida” es un poco engañoso. Hay ciertos verbos HTTP que se supone que cambian el estado de un sistema (POST, DELETE) y otros que no deberían (GET, OPTIONS, HEAD). Por lo tanto, dos solicitudes GET consecutivas deben tener el mismo resultado, siempre que no haya POST / DELETE / etc. mientras tanto. Y una solicitud no contiene en línea la primera línea (con el método y la ruta) sino también los encabezados, incluido un token de autenticación si es necesario.

Para la autenticación, este es un problema, ya que permite ataques de repetición por diseño (al menos para ver datos). Una forma tranquila de decirle a un cliente que una respuesta tiene una vida útil limitada es establecer los encabezados de Cache-Control adecuados (privados y amigos).

Por “apátridas”, las personas a menudo se refieren a “ningún estado local en el proceso de procesamiento de solicitudes / servidor entre solicitudes”, lo que puede lograr en diferentes grados utilizando almacenamiento centralizado / cachés o tokens de autenticación que contienen una carga útil firmada / encriptada (aunque debería ser cuidado con este último). Dado que es difícil arreglar sesiones para clientes API a un host específico (muchos no tienen cookies jar), es muy probable que sus manejadores de solicitudes tengan que estar sin estado en este sentido para que su API REST funcione. De lo contrario, un servidor crearía un token de acceso y el siguiente no lo sabría.