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

时间:2017-08-02 07:29:29

标签: html rest api restful-architecture

您好我正在研究RESTful API并在本地运行网站以进行锻炼。

我认为RESTful是一种非常好的方式。可以通过HTTP方法识别CRUD操作,我们可以使用一个URL来处理它们。

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

例如,如果我正在实施论坛,我需要在论坛中的CRUD帖子中使用API​​,例如

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

上面的GET请求可以轻松地提供第一和第二类HTML文件。
但是对于第三种类型的HTML文件,我需要在上面的API中使用额外的参数,或者使用像/ forum / createpost这样的新API来提供这样的HTML文件。

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

这可能会或可能不会影响您的问题,但是由于您在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