我是RESTful Web服务和RESTlet的新功能.我们只有建立基于servlet的Web应用程序(JBoss / Apache上的Servlet / JSP)的经验.现在,我们正在构建一个基于RESTlet的应用程序,其中服务器端API将被两种类型的客户端使用 – Web使用浏览器和基于桌面的swing.

我所理解的是根据REST概念
a)服务器无法维护会话以提高可扩展性等原因
b)客户端的每个请求都应该是独立的

现在,我真的很困惑如何实现这一点.假设我们采用简单的购物车应用程序.

步骤1)客户端发送认证请求,服务器认证,服务器响应OK.

步骤2)客户端向购物车发送添加项目的请求.服务器响应OK.

步骤3)客户端发送另一个请求,将第2项添加到购物卡.服务器响应OK.

通常,在通常的Web应用程序中,在服务器上的步骤1中创建会话,从那时开始,与该客户端相关的所有请求将自动与相同的会话相关联,并且我们将会话状态(在这种情况下为购物车)存储在会话对象,并检索/更新客户端的后续请求.

现在,在上述情况下:

1)如果服务器上没有会话维护,我们如何在步骤2和3中验证和授权客户端?

客户需要每个请求发送一些附加信息?

3)如何在步骤3中检索客户特定的购物车?

4)客户端是否需要在步骤3中再次发送步骤2中由服务器创建/返回的购物车?

显然,这是最简单的用例,因此每个开发RESTful Web服务的人都必须设计他们的应用来处理这个问题.使用RESTLet在RESTful Web服务中处理会话管理,身份验证,授权的最佳和最常用的方法是什么?如果我们必须在客户端数据的服务器端维护缓存,那么我们代表服务器维护会话有什么不同?

提前致谢,

解决方法

1) how do we authenticate and authorize Client in Step 2 and 3 if
there is no session maintained on the server ?

2) does client need to send some additional information with each
request ?

是.您必须在每个请求中发送身份验证/授权数据.这将阻止服务器“记住”你是谁(即无状态服务器,没有会话)

3) How do we retrieve the client specific Shopping Cart in Step 3 ?

我们来问一个不同的问题:如果服务器重新启动会发生什么?您是否希望所有购物车数据丢失?可能不会.你应该把它存放在一个重新启动的地方.应用持久存储.可能在服务器或客户端…

…现在,如果您的客户端重启?您可以选择使用POST请求(用户添加第一个项目)为该用户创建购物车资源,或者在客户端登录时(浪费)创建购物车资源.然后使用PUT / DELETE继续更新购物车,并使用GET进行读取.

应该在数据库?可能,取决于这是怎么想要的.如果它必须坚持下去,这是一个很好的地方来保持它,以便它可以在重新启动后生存.

那么如何接收客户特定的购物车?那么你只需要发送GET资源的请求!而已!第一个POST将在适当的URL创建一个资源,然后可以使用它.

稳定的网络服务还具有安静的网址,这是设计的关键部分.

4) Does the client need to send it’s Shopping Cart that was
created/returned by server in Step 2 again in Step 3 ?

不,如上所述.但是,如果您在客户端使用cookies或LocalStorage或其他信息,那么也许您会这样做.

ObvIoUsly,this is the simplest use case and so every one developing
RESTful web services must be designing their app to handle this. What
is the best and most common way to handle session management,
authentication,authorization in RESTful web services using RESTLet ?

是.这很简单,但是需要一段时间来思考“资源”而不是“服务”.在安静的设计中,一切都是(或可以)一个资源,包括交易,购物车等,

但是,授权/认证是http请求数据包的一部分,并随每个请求一起发送.我建议你阅读那些.

If we have to maintain cache on server side with the client’s data
then how is this different from server maintaining sessions on our
behalf ?

巨大差距!您是否为高效缓存或维持会话?如果系统重新启动,您的系统将在空缓存上无缝工作?如果是,您正在缓存您正在维持状态的其他表现.

我强烈建议您阅读Richardson& Ruby来阐述上述概念,并且深入了解如何设计安静的服务…它需要一些习惯.

java – 如何使用RESTlet在RESTful Web服务中强制执行“会话”?的更多相关文章

  1. html5 http的轮询和Websocket原理

    这篇文章主要介绍了html5 http的轮询和Websocket原理的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. ios – 为什么Web Inspector向我显示“无检查应用程序”?

    什么可能是一个可能的原因,什么可以解决?解决方法我有同样的问题,这是因为我正在运行iOS8,通过将Safari更新到7.1来修复.

  3. Swift开发:GCDAsyncSocket通信之TCP服务器

    overridefuncviewDidLoad(){super.viewDidLoad()clientSockets=NSMutableArray()msgTextView.backgroundColor=UIColor.grayColor()msgTextView.text="接收的客户端消息:\n"}//发送消息按钮@IBActionfuncsendBtnClick{ifclientSockets.count==0{return}letmsg=inputTextInput.text!//1.处理请求,

  4. Swift Web 开发之 Vapor - 入门一

    简介Vapor是一个基于纯Swift构建出的Web开发框架,目前可以运行在macOS和Ubuntu,用于构建出漂亮易用的网站或者API服务。组件VaporAuthSessionsCookiesRoutingVaporToolBoxFluentEngineHTTPURIWebSocketsSMTPLeafJSONConsoleTLSCryptoNodeSocksVapor使用SwiftPackageManager做依赖和包管理,不过以我个人目前的使用感受来看SwiftPackageManager还不是很好用

  5. Swift Web 开发之 Vapor - 模版 Leaf三

    Leaf作为Vapor官方提供的组件之一原生集成在Vapor中,Leaf模版文件以.leaf结尾,模版语法夹杂在HTML之间,我们可以直接使用而不需要引入其他外部依赖。#import()用来声明一个插入点在当前模版。这是[SwiftWeb开发之Vapor]系列的第三篇,说了说Vapor中自带的Leaf模版引擎,按照笔者目前的使用情况来看其实Leaf还不太成熟,虽然还有太多需要优化改进的地方,不过我相信之后一定会越来越好的。所以不要害怕,赶紧来写SwiftServerSide吧!

  6. 如何将android客户端连接到我的笔记本电脑内的Apache服务器(php)的localhost?

    我的笔记本电脑中的localhost-127.0.0.1或android10.0.0.1中的localhost?>那么,如果我想从android访问localhost来调用PHP来运行?哪个ip地址/url我需要放在Android应用程序?我需要在httpconfig中为XAMPP修改任何内容吗?解决方法使用ipconfig在笔记本电脑中找到您的IP地址.在手机中使用该地址而不是127.0.0.1.

  7. android rest客户端不支持的媒体类型

    我尝试从android模拟器发送请求到一个安静的服务器.但我总是得到错误:415UnsupportedMediaType.客户代码:服务器的代码:解决方法问题是服务器不知道客户端请求的媒体类型.在客户端代码中尝试这样的事情:request.setHeader(“Content-Type”,“application/json”);

  8. android – Facebook Javascript SDK和Phonegap URL错误

    我目前正在尝试使用android应用程序中的phonegap开发facebook登录功能.我已经完成了所有必要的安装,并为我放在facebook上的应用程序生成了一个哈希键,但是我一直收到以下错误:GivenURLisnotallowedbytheApplicationconfiguration.:OneormoreofthegivenURLsisnotallowedbytheApp’ssetti

  9. android – 在Internet上发布我的RESTful Web服务

    什么是最好的方法?例如,我可以使用AmazonWebServices或ApacheHTTPServer吗?

  10. android – GoogleJsonResponseException:404 Not Found使用谷歌应用程序端点引擎后端

    我按照下面的教程.https://developers.google.com/eclipse/docs/running_and_debugging_2_0它基本上为我现有的应用程序添加了GAE后端.然后,我尝试下面的示例,在本地开发服务器上运行它,然后我得到下面发生的异常叫做.我的代码如下.解决方法导致此问题的另一个可能原因是未在appengine-web.xml中设置正确的application

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部