您好我正在研究RESTful API并在本地运行网站以进行锻炼。
我认为RESTful是一种非常好的方式。可以通过HTTP方法识别CRUD操作,我们可以使用一个URL来处理它们。
但对我来说最令人困惑的是,我们如何提供请求CRUD操作所需的HTML文件?
例如,如果我正在实施论坛,我需要在论坛中的CRUD帖子中使用API,例如
<小时/> [GET] /论坛 - 查看论坛中的所有帖子 [POST] / forum - 创建新帖子
上面的GET请求可以轻松地提供第一和第二类HTML文件。
但是对于第三种类型的HTML文件,我需要在上面的API中使用额外的参数,或者使用像/ forum / createpost这样的新API来提供这样的HTML文件。
我认为,从RESTful的角度来看,我错过了一些东西,需要区分服务静态(或动态)HTML和处理CRUD请求。
处理这个问题的最佳方法是什么?
我也发现了一些关于这个问题的问题,但我找不到明确的答案。
答案 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')
})