¿No tengo permitido almacenar algo en la base de datos para cada usuario? ¿Esto viola el “principio de no mantener el estado”?

Por supuesto, puede almacenar algunos datos de usuario en una base de datos, siempre que dichos datos se conviertan en nuevos recursos (con su identificador de recursos) o parte de un recurso existente, accesible desde la interfaz Uniforme de su API.

Entonces dependerá de su capa de acceso a la base de datos devolver constantemente los datos de este recurso desde cualquier servidor intermedio como para cualquier otro dato de base de datos.

El hecho de que dichos datos estén relacionados con un “Usuario” específico significa que:

opción 1: dado que REST es impulsado por hipermedia, su interfaz uniforme debe proporcionar una referencia (un enlace) a su identificador de recurso relacionado (por ejemplo, una URL) desde la representación de recursos “Usuario” (JSON, XML, HTML, …).

Opción 2: se convierte en parte del recurso del usuario en sí, y luego forma parte de la representación del usuario. En tal situación, el envío de dichos datos a la base de datos se consideraría, desde el punto de vista de la API REST, como una actualización del recurso “Usuario”.

Lo importante es considerar si:
– dicha vida útil de los datos del usuario está vinculada a la sesión del cliente del usuario o no
– dichos datos de usuario deben ser accesibles desde múltiples clientes o no

Si dicha vida útil de los datos está directamente relacionada con la sesión del cliente Y no es accesible desde múltiples clientes / dispositivos, entonces dichos datos se consideran como un estado de sesión y la regla sin estado requiere que se almacene solo en el lado del cliente.

Tenga en cuenta que desde HTML5, el estado del cliente en la plataforma web también se puede mantener durante la vida útil de la sesión, lo que mejora la capacidad de respuesta de las aplicaciones, siempre que estos datos no sean necesarios para otro cliente.

También puede interesarle esta publicación de blog que describe la diferencia entre “estado de la aplicación” y “estado del recurso”: REST, ¿dónde está mi estado?