如何使用 RESTful API 提供静态(或动态?)HTML 文件?

How to serve static (or dynamic?) HTML files with RESTful API?

你好,我正在研究 RESTful API 并在本地制作一个网站 运行 以锻炼身体。

我认为RESTful是一个很好的方法。 CRUD 操作可以通过 HTTP 方法识别,我们可以用一个 url.

来处理它们

但让我最困惑的是,我们如何提供请求 CRUD 操作所需的 HTML 文件?

例如,如果我正在实施一个论坛,我需要 APIs 到论坛中的 CRUD posts


[GET] /forum - 查看论坛
中的所有 post [POST] /forum - 创建一个新的 post
[GET] /forum/:id - 查看 id
的 post [PUT] /forum/:id - 修改id
的post [DELETE] /forum/:id - 删除 id
的 post
想想我们如何使用论坛,我们至少需要 3 种类型的 HTML 页面。
他们是,
1. 一个可以查看论坛中所有 post 的页面。
2.看具体的一个页面post.
3. 输入标题和内容的页面以创建(或修改)新的 post.

第一类和第二类 HTML 文件可以通过上面的 GET 请求轻松提供。
但是对于第三种 HTML 文件,我需要使用额外的参数与上面的 APIs 或制作一个新的 API 例如 /forum/createpost 来提供这样的 HTML 个文件。

我认为,从 RESTful 的角度来看,我遗漏了一些东西,需要区分服务静态(或动态)HTML 和处理 CRUD 请求。

处理此问题的最佳做法是什么?
我也找到了一些关于这个问题的问题,但是我找不到明确的答案。

您可以为此使用 HTTP 内容类型协商。 POST/PUT 请求(可以)包含 Content-Type header 来声明他们发送的内容类型,更重要的是,所有请求都包含 Accept header声明它接受的响应类型。如果客户端接受 text/html 响应,则提供 HTML 页面;例如,如果他们接受 application/json 响应,则提供 "RESTful" JSON 响应。这样您的服务器就可以使用适当的内容响应不同的情况,并且相同的端点可以用作 API 和 HTML 处理程序。

或者,您可以使用扩展来区分请求:/posts.html 提供普通 HTML 文件,而 /posts 由 REST 端点提供服务。这可以在 Web 服务器配置中轻松完成。

这可能会或可能不会解决您的问题,但是由于您在 Node + Express 中工作,路由可能是一种可行的方法(如果我正确理解您的问题)。下面是服务器实现带有参数的接受路由的示例。请注意,如果需要,您可以在某些情况下将参数设为可选。

app.get('/', function (req, res) {
  res.send('Index')
})

app.get('/forum', function (req, res) {
  res.send('Forum Index')
})

app.get('/forum/:id', function (req, res) {
  // To access id you do 'req.params.id'
  res.send('Forum Index')
})

app.put('/forum/:id', function (req, res) {
  res.send('Modify Forum')
})

app.delete('/forum/:id', function (req, res) {
  res.send('Delete Forum')
})

参考:https://expressjs.com/en/guide/routing.html

我认为您混淆了应用程序的两个独立部分。一个是为 CRUD 操作提供端点的 REST API。 发送 API 请求的 HTML 文件不是 REST API 的一部分。它们由为用户提供前端的 Web 应用程序提供服务,并在后端调用 REST API 以获取要显示的信息。换句话说,进行调用的 Web 应用程序就是您的表示层。 REST API 是您的业务逻辑。据推测,REST API 与数据库交互以向其中写入数据和从中读取数据。那就是您的持久层或存储层。