【问题标题】:What is event stream in rest api and why do we need it?什么是rest api中的事件流,我们为什么需要它?
【发布时间】:2019-09-27 15:37:11
【问题描述】:

我第一次尝试开发rest api。并希望通过 GET 和 POST 方法查看使用更改流的资源的环回引用,例如 /resources/change-stream

我访问过this post,这表明rest api和streaming api之间的区别。

我认为,虽然环回在 rest api 中提供它。它是什么以及它的作用。您能否以您对我清楚的方式向我解释(对于一个六岁的孩子)。因为,我是第一次自己开发 REST API。所以,如果可能的话,我想逐步了解邮递员应该有什么。我应该使用'/api/resources/change-stream?_format=event-stream 之类的网址以及application/json 内容类型还是只使用/api/resources/change-stream 都可以。

如果你能给我一些真实的例子,那将是一个很好的例子,这样我就可以在我自己的应用程序中尝试开发它。

PS:无论您选择哪种语言(Node.js、Python、Ruby、PHP),我都可以通过一些示例来提供答案。

【问题讨论】:

  • 无需添加一堆与您的问题无关的标签。仅仅因为可以使用给定语言开发 REST API 并不意味着您需要使用该语言标记您的问题。
  • 您能描述一下您的 API 的预期用途吗?你说你正在开发一个 REST API,但听起来你想要一个流 API。两者并不完全排他性,您甚至可以为您的 REST API 创建一种事件流 API 端点,正如我在回答中所描述的那样。但是,根据您的意图,您可以做出架构决策。听起来您几乎认为流 API 是 REST API 的要求,但事实并非如此。
  • @zero298 我在想别的事情很糟糕。感谢您的确认。我还在等别人。非常感谢您的回答。

标签: rest http websocket server-sent-events event-stream


【解决方案1】:

如果我不得不猜测,这听起来像是一个单向long polling,您可以在其中留下一个长时间运行的开放请求,该请求将在事件发生时满足请求的服务器。如果请求超时,请不要担心,发送另一个并保持打开状态。当请求通过事件满足时,立即触发另一个请求,以便您可以接收下一个事件。

由于 API 另一端的文档仍然(可能)是 JSON 文档,因此您应该保留该 mime。但是,您可以作为事件类型发回的内容不受限制。如果您想发回 XML 或 YAML,请执行此操作并设置该 mime。 “流”只是一种约定机制。

就您的应用程序而言,从 REST 的角度来看,您尝试获取的事件只需要一段时间即可提供给您,而且失败的可能性很高。但我不会从 REST 的角度来看这个,REST 只是约定,不要让它束缚你。

或者,长轮询可能应该被 WebSocket 之类的东西取代,因为它提供了一个更简单的 API(在我看来)并且看起来不像长轮询那样 hacky。

如果您想问“我如何告诉 RESTful 使用者我的 API 是一个‘流’API”,那没有意义。同样,就 REST 而言,https://example.com/api/events/ 端点指的是一个 JSON 类型的文档,它变化很大,需要很长时间才能接收,并且经常“失败”(如果您生成的事件不会触发很多) .

【讨论】:

  • 感谢您的回答。你的意思是如果我也使用 websocket 那么我不需要提供这样的端点?顺便说一句,链接的帖子对我来说似乎是一本好书。再次感谢。
  • @BhojendraRauniyar 除非您所服务的任何客户端不支持 WebSocket 之类的东西,否则您不必这样做。考虑Socket.IO 库。它处理客户端和服务器之间的拉/推消息传递,但支持 Flash、WebSocket 和长轮询连接,具体取决于客户端支持的内容。你的目标是什么?你没有理由不支持 RESTful 接口,而 有一个 WebSocket 端点。
猜你喜欢
  • 1970-01-01
  • 2011-01-15
  • 2017-08-24
  • 2023-03-04
  • 2017-02-24
  • 2011-08-19
  • 1970-01-01
相关资源
最近更新 更多