我正在为三层系统设计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究竟。拜托