在基于HTTP的基础上开发RESTful API方面,我是一个新手,所以这就是为什么我有一些基本的架构问题。为了简单起见,我将身份验证放在等式之外。
RESTful API应由nginx(采用反向代理配置)和Redis处理。某些HTTP请求/响应可能在HTTP正文中使用JSON。
从消息传递的角度来看,我想实现的目标是:
1.(客户端-> nginx)通过HTTP向nginx发出RESTful API请求。
2.(nginx-> Redis)nginx将把API请求传递给Redis并发出“ publish newRequest”,此后,nginx将等待Redis的响应(使用nginx第三方Redis模块)。
2.1我还不确定上述“等待Redis的响应”将如何实施。但是,我可以考虑订阅一个Redis事件,该事件将在请求处理后立即由我的自定义Redis“应用程序”(请参见下文)发布。您可能知道更好的方法吗?
3.(Redis-> Redis“应用程序”)(已发布)“ newRequest”将唤醒其Redis订阅者,该订阅者是Redis“应用程序”(基于Redis C ++客户端的自定义C ++代码)。
4.(Redis“应用程序”-> Redis-> nginx->客户端)。Redis“应用程序”将处理该请求,然后将发布响应(用于唤醒Redis订户-从2.1-并因此传递“回复”返回到nginx,最后是原始调用者)
4.1现在..我的Redis“应用程序”可能会失败,所以我想将此类错误传达回原始调用方(同时使用HTTP响应错误代码和附加的描述性JSON)。但是从我的Redis“应用程序”中,我无法控制HTTP响应错误代码(由nginx管理)。因此,我想知道的是..如何/在哪里可以更清晰地实施错误处理,这样我的Redis“应用程序”将驱动错误处理,而不必为我在Redis中添加的每个新错误更新nginx配置“应用”?
预先感谢您对我们的支持!
最好的祝福
所有(对我来说)nginx 3rd Party Redis模块通常使用基本的请求/响应协议,而不是长期的发布/订阅协议。它们全部使用nginx的主要功能之一-对上游服务器的异步子请求。异步意味着工作进程直到响应到达才阻塞,而是继续处理来自客户端的其他请求和来自上游服务器的响应。
这是Nginx功能的良好概述。
您对“ Redis应用程序”的想法对我来说有点怪异和多余。
使用redis2-nginx-module时,通过使用Redis作为存储的nginx conf文件处理RESTful API的可能性非常有限。最受欢迎的用法-仅页面缓存。
但是您可以在Redis端使用EVAL命令来做一些聪明的事情。不是我的首选方式。
我建议使用完美的OpenResty捆绑包。借助LuaNginxModule和LuaRestyRedis,您可以在nginx中实现任何智能逻辑,并将Redis用作存储。使用LuaRestyRedis模块,您将能够编写非常简单但仍然高效的代码,以异步方式处理对Redis的子请求。在处理一个RESTFul请求的同时,您甚至可以并行或顺序向Redis发出一个子请求。
它还具有一个带有JSON解析和编码支持的LuaCjson模块。
管道将简单得多:客户端<-> nginx <-> Redis
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句