使用Node.js扩展现有的RESTful API

时间:2018-10-19 20:12:35

标签: node.js rest http express tomcat

我当前正在Apache Tomcat Servlet容器上运行Web服务。该Web服务具有基本URL,并使用以下结构公开我的应用程序数据:

http://[hostname]:[port]/path/to/root/[db_table_name]/[primary_key]?fields=name,...

对上述URL的HTTP GET调用将返回JSON格式的字符串。

尽管我的应用程序文档将其描述为RESTful API,但我感到困惑,因为我印象中真正的RESTful API不使用查询字符串。相反,据我所知,真正的静态API以资源端点的形式提供了统一的结构。

我的问题与如何使用Node.js创建自定义API来利用现有API有关。我不想重写应用程序逻辑或数据库调用。我只需要知道如何使用Node.js(可能使用Express或其他框架)创建API调用,并让现有的API处理请求。

例如,我可以使用具有多个路由的Express模块​​编写Node.js代码,这些路由将处理客户端请求,而客户端请求又将调用现有API(即/ path / to / root / [table_name] / [ pk] ...并返回响应。

  1. 如果我的Apache Tomcat服务器正在侦听端口8080,我将如何部署Node.js服务器以侦听另一个端口,然后将请求重定向到端口8080上的现有WS URL。
  2. Express框架是否支持显式指定根路径(例如http://localhost:3000/path/to/root/[table_name]/[pk])作为默认根路径?
  3. 最后,我知道REST API支持CRUD操作。对于POST方法,Express(或Node.js)是否具有内置逻辑来处理重复的POST请求,这样就不会在数据库中创建重复的记录。

我正在阅读有关REST的不同文章和教程,但我认为我缺少一些东西。任何能使我朝正确方向发展的信息或建议,将不胜感激。

1 个答案:

答案 0 :(得分:0)

这里有很多要讨论的内容,但是我会尽力回答您的三个问题。既然您已经提到使用Express,那么我会假设Express是您正在使用的框架。

  1. 如果使用Express,则可以选择启动服务器时要侦听的端口,因此可以选择此时所需的任何端口(请参阅here)。 如果您需要重定向请求,可以使用res.redirect()轻松完成(请参阅here)。但是,您也可以直接调用另一个Web服务,检索数据并将其返回给客户端,而不是根据需要重定向它们。但这需要更多代码才能在node.js中发出http请求。

  2. 我不确定100%是否能解决您的问题,但是可以通过多种方法向所有路由添加“基本路径”或名称空间。我发现this example使用了各种名称空间,但在您的情况下,您只需要一个适用于所有路由的名称空间。

  3. 我认为没有内置的方法可以做到这一点。我能想到的最好的办法是为该请求创建某种ID,这样,如果两次发送该请求,就可以使用它进行检查,但这远非理想。

我想补充一点,我不确定查询参数不是RESTful的想法是从哪里来的?我认为查询参数很好,因为这就是查询的方式!否则,您将无法从RESTful API中请求正确的数据。假设您有一个/ posts端点,并且想要获取特定用户的帖子(用户ID = 1)。 RESTful的方法是向/ posts?user = 1发出GET请求。

希望这会有所帮助!