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



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

http://[主机名]:[端口]/路径/到/根/[db_table_name]/[primary_key]?字段=名称,...

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

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

我的问题与如何创建自定义 API 以使用 Node.js 利用现有 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 的不同文章和教程,但我认为我错过了一些东西。任何可以带我走向正确方向的信息或建议将不胜感激。

这里有很多内容要介绍,但我会尝试涵盖您的三个问题。既然你已经提到使用Express,我会回答,假设Express是你正在使用的框架。

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

  2. 我不是 100% 确定这是否是您问题的答案,但有一些方法可以将"基本路径"或命名空间添加到您的所有路由中。我找到了这个使用各种命名空间的示例,但在您的情况下,您只需要一个适用于所有路由的命名空间。

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

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

希望这有帮助!

最新更新