De acordo com Roy Fielding (um dos principais autores da especificação HTTP) em sua tese seminal Architectural Styles ao discutir o REST , ele menciona:
[E] uma solicitação do cliente para o servidor deve conter todas as informações necessárias para entender a solicitação e não pode tirar proveito de nenhum contexto armazenado no servidor.
Por "contexto armazenado", ele está se referindo ao estado do aplicativo, por exemplo, qual é o número da página da página seguinte versus estado do recurso, por exemplo, qualquer armazenamento de dados, imagem etc. - que é sem dúvida o ponto principal do REST.
É justo dizer que a maioria das tentativas de descanso puro (aqui definidas como uma implementação em conformidade com a tese acima) deve falhar devido à dependência de armazenar dados da sessão no servidor (persistentes ou não)?
O conceito de uma sessão é comum - principalmente para desenvolvedores da Web -, mas é RESTful de acordo com a definição acima?
Respostas:
Eu diria que sim, o estado da sessão torna um aplicativo RESTful não RESTful. Exemplo trivial, minha irmã assina o Wall Street Journal. Regularmente, ela estará lendo algo por trás do paywall e decidirá enviar um link (por meio de seu próprio cliente de email, não pelo WSJ) a um amigo que não possui uma conta do WSJ. Clique, envie, falhe. Claramente, a experiência de minha irmã nesse URL é diferente da de sua amiga.
Relacionado, mas não estritamente relacionado ao tópico: Estou na fase inicial de design de um aplicativo desenvolvido para apoiar esforços significativos de pesquisa na rede (chamados quests (pense: marcadores sobre esteróides e LSD)). O proprietário da missão deseja compartilhar uma visualização específica de seus dados com outra pessoa, mas essa visualização requer uma combinação do estado da interface do usuário (por exemplo, quais visualizações de quais dados estão mostrando em quais painéis), juntamente com as permissões apropriadas para acessar a interface do usuário e os dados exibidos. Há muito estado armazenado necessário para que o destinatário obtenha a visualização desejada.
Minha solução atual é armazenar todas as informações da interface do usuário / ACL / todas as informações necessárias para a exibição em um objeto separado e retornar a URL (provavelmente um UUID) para esse objeto. Acredito que acessar o objeto view pode ser considerado RESTful no sentido de que todos os que possuem o mesmo recebem a mesma informação / experiência.
fonte
Eles definitivamente fazem! Ao implementar o REST, não deve haver sessão do lado do servidor; caso contrário, você possui uma solução RPC / REST híbrida.
O cliente deve enviar para um serviço RESTful todo o contexto necessário para atender à solicitação, incluindo as informações necessárias para autenticar o cliente, sempre que uma nova solicitação é feita. O servidor é livre para armazenar informações em cache para agilizar o atendimento de solicitações subsequentes, mas as informações em cache não devem corresponder a uma sessão do servidor. Em outras palavras, a própria solicitação deve conter informações suficientes para serem processadas, mesmo na ausência do estado em cache.
fonte
Provavelmente depende do que você quer dizer com "dados da sessão". Esse é um termo preciso?
A comunicação segura entre duas partes geralmente envolve o servidor para gerar (e armazenar) um "token de acesso" com tempo limitado que o cliente deve fornecer a cada solicitação como uma forma de autorização. Esse token de acesso já é o que eu chamaria de "dados da sessão" - é armazenado no servidor, com tempo limitado e relacionado a um cliente (geralmente suas permissões).
Eu ficaria muito surpreso se esse tipo de operação fosse rotulado como não-RESTful. OAuth é um exemplo.
Não sou especialista e não estou muito confiante aqui; Estou apenas compartilhando minhas idéias, esperando que sejam úteis.
fonte
O ponto mais importante do REST é que um URI para um recurso sempre aponta para o mesmo recurso. Assim, os usuários podem passar uma referência a esse recurso e todos vêem o mesmo. Isso é chamado de Representational State Transfer (REST). Se o servidor mantiver o estado e fornecer um recurso diferente para o mesmo URI, eu diria que isso não é mais puro REST.
fonte
As sessões são basicamente usadas para adicionar estado a aplicativos RESTful sem estado. Portanto, formalmente, isso torna seu aplicativo RESTful com estado, mas manter o servidor em estado facilita a sua vida, pois você não precisa passar todos os dados para frente e para trás em cada solicitação / resposta.
As sessões e, geralmente, permitem evitar isso, e isso traz alguns benefícios positivos em desempenho (menos dados transferidos) e segurança (menos dados disponíveis para adulteração).
Portanto, embora viole oficialmente parte da definição de REST, é tão útil que é raro ver aplicativos RESTful que não usam o estado por meio de sessões.
fonte
O que Fielding quis dizer com essa declaração é que o servidor de aplicativos que hospeda a API REST não associa o estado do ambiente a uma solicitação por algum tipo de mecanismo dos bastidores. Considere a diferença entre um servidor de aplicativos e um servidor de banco de dados . A restrição REST é que o servidor de aplicativos deva ser sem estado . No entanto, o servidor de aplicativos pode delegar solicitações de estado de recurso ao servidor de banco de dados com base em informações que fazem parte da solicitação, como uma combinação de usuário / senha no cabeçalho da Autorização ou no próprio Uri. Afinal, o REST é baseado no modelo de cliente / servidor.
fonte