(我对RESTFul并不熟悉,如果我的概念错了,请纠正我)
在RESTFul架构中,我们将每个操作映射到一个URL。如果我点击“发布文章”,可能实际上是网址http://example.com/
和一些数据action=post&content=blahblah
。
如果我想发布,但不刷新整个网页,我可以使用javascript的XMLHTTPRequest。我发布它然后得到它的内容并将其插入我的页面中的div。这些操作都是异步的。
然后我知道有一些名为WebSocket
的东西,它是包装socket.io
。它使用“消息”在客户端和服务器之间进行通信。当我点击“发布”时,客户端只需拨打socket.send(data)
并等待服务器的client.send(data)
。这很神奇。但URL怎么样?
可以在不重复自己的情况下使用这两种模式吗?换句话说,每个动作都有它的URL,其中一些可以实时与用户交互(通过socket.io?)
而且,我应该这样做吗?在一个非常互动的网络程序(例如游戏)中,RESTFul仍然有意义吗?
答案 0 :(得分:37)
您正在为通过http映射到REST的操作定义处理程序。 POST和GET通常是指对实体的更新和查询。绝对没有理由您只能为这两种情境中可以使用的CRUD操作的泛型版本定义处理程序。我通常这样做的方法是引入一条“路线”的概念。到实时传输,并将它们映射回相同的CRUD处理程序。
你有一个会话,你可以施加相同的ACL等。
+---------------------------------+
| |
| BROWSER |
| |
+--+--^-------------------+---^---+
| | | |
| | | |
+--v--+---+ +--v---+---+
| | | |
| HTTP | | SOCKET.IO|
+--+---^--+ +--+---^---+
| | | |
+--v---+------------------v---+---+
| |
| ROUTING/PUBSUB |
+-+--^-------+--^-------+--^------+
| | | | | |
+-v--+--+ +-v--+--+ +-v--+-+
| | | | | |
| USERS | | ITEMS | |ETC |
+-------+ +-------+ +------+
ENTITY CRUD HANDLERS
答案 1 :(得分:29)
为WebSockets设计CRUD API
构建Weld时,我们正在使用REST和WebSockets(Socket.io)。关于WebSockets的三点观察:
我的解决方案:
"AppServer/user/create"
。