【问题标题】:Managing state in RESTful based application在基于 RESTful 的应用程序中管理状态
【发布时间】:2011-12-23 01:45:19
【问题描述】:

我们正在评估用于基于 Web 的应用程序的技术,并且一些建议是采用基于 RESTful 的服务方法。 技术栈

1) 弹簧 2) Apache CXF (JAX-RS)

我的问题是

1) 如何在请求之间管理状态。例如,用户已通过身份验证,现在他正在发出一系列请求,比如说通过分页报告。我想这个 URL 会像

domain.com/reports/customreport/page/1 domain.com/reports/customreport/page/2 等等……

a) 用户信息和请求参数存储在哪里,以便在请求之间共享。 b) 假设正在流式传输结果,Rowset 存储在哪里?

是否有类似于 Petclinic 的完整示例应用程序可以为此类应用程序提供最佳实践。

【问题讨论】:

    标签: java rest jax-rs


    【解决方案1】:

    如果您严格/正确地执行 RESTful,则在每个请求中都会进行用户身份验证,并且没有会话的概念。每个请求都包含足够的上下文信息(在 URL 和/或请求参数中)以允许它独立于会话工作。

    1) 如何在请求之间管理状态。

    它必须由客户端管理。

    a) 用户信息和请求参数存储在哪里,以便在请求之间共享。

    用户身份验证信息由客户端存储,并随每个请求提供给服务器。服务器将在每个请求上重新计算有关用户的任何派生信息。任何通常存储在服务器端“会话”中的请求参数都必须随每个请求重新传递。

    b) 假设正在流式传输结果,Rowset 存储在哪里?

    在第一瞬间,无处可去。每次都会重新发出查询,并带有一个参数说明要跳到哪里。如果性能是一个问题,你可以

    • 预读几页结果集并将它们存储在服务器端缓存中,或者
    • 为查询调整数据库查询缓存。

    【讨论】:

      【解决方案2】:

      1) 用户信息不会存储在任何地方,用户必须在每个请求中发送他的凭据(或您使用的任何身份验证方法)。

      2) 流式处理在 RESTful API 中没有多大意义,如果您想做流式处理,我强烈建议您寻找类似 WebSockets 的东西(在 Java 中,您可以轻松做到这一点with Jetty

      如果你说的是流式但你的意思是分页结果,和1一样,没有状态保存,客户端必须发送一个包含所有信息的新请求,服务器必须查询数据库(或者去缓存,或者做任何需要的事情)并将结果返回给客户。

      您还应该阅读有关 REST 的更多信息,因为您的问题很模糊,一个好的开始是 Restful Web Services 书,或者,如果您喜欢冒险,您可以尝试 Roy Fielding dissertation,它定义了什么我们今天称之为 REST。

      【讨论】:

        猜你喜欢
        • 2021-12-30
        • 1970-01-01
        • 2020-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-15
        • 2018-09-04
        • 1970-01-01
        相关资源
        最近更新 更多