我正在为三层系统设计REST API,例如:Client application
-> Front-end API cloud server
-> user's home API server (Home)
。
Home
是家用设备,应该Front-end
通过Websocket或长时间轮询来保持连接(这是我们违反REST的第一个地方,以后还会更糟)。Front-end
大多数情况下会将Client
请求传送到Home
连接并处理一些呼叫本身。有时会Home
向发送通知Client
。
Front-end
并Home
具有基本相同的API;Client
可能是Home
通过LAN直接连接。在这种情况下,Home
需要Client
在Front-end
自身上注册一些操作。
该系统中REST的优点是:
- REST是人类可读的;
- REST具有明确定义的动词(如CRUD),名词和响应代码到协议对象的映射。
- 它可以通过HTTP运行并传递所有可能的代理。
REST的反对意见是:
- 我们不仅需要一种请求-响应通信方式,还需要一种发布-订阅方式。
- HTTP错误代码可能不足以处理三层通信错误。
Front-end
可能返回202 Accepted
异步调用只是为了发现必要的Home
连接断开了,应该已经连接了503
; Home
需要向发送邮件Client
。Client
将必须进行轮询Front-end
或维护连接。
我们正在考虑通过Websocket上的WAMP / 高速公路来获得发布/订阅功能,这让我惊讶的是它已经看起来像消息队列。
是否值得评估一种消息队列作为传输方式?
看起来像消息队列相反是:
- 我需要在消息级别上自己定义CRUD动词和错误代码。
- 我读到一些有关“较高的维护成本”的信息,但这意味着什么?
这些考虑有多严重?
@Jimmy Hoffa
有效点,谢谢。是的,但不完全是。这是一个常见的数据库,存储等。@Javier
谢谢,这是答案的重要部分。
@Mike Brown
究竟。拜托