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

标签 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 不使用查询字符串。相反,据我了解,真正的 Restful 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 的不同文章和教程,但我认为我遗漏了一些东西。任何可以引导我走向正确方向的信息或建议将不胜感激。

最佳答案

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

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

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

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

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

希望这对您有所帮助!

关于node.js - 使用 Node.js 扩展现有的 RESTful API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52899302/

相关文章:

node.js - Node-Jasmine 没有按预期失败

json - Node : saving JSON to MongoDB

java - 如何处理 CXF restful webservices 中的可选参数

security - 与仅用于登录的 SSL 的安全通信?

javascript - 如何在 Angular 7 中对包含特殊字符的查询参数进行编码?

angularjs - Angular2 快速入门教程 - 用远程 http 数据替换模拟数据?

node.js - 尝试在heroku中部署 Node 应用程序时不断收到应用程序错误

javascript - 使 .local 解析为 IP 地址和端口 (mdns)

node.js - Node JS - 递归调用

spring - 如何使用 Thymeleaf 模板从 Json 加载数据