2017-08-02 109 views
1

您好我正在研究RESTful API并使网站在本地运行。如何使用RESTful API提供静态(或动态?)HTML文件?

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

但最令人困惑的事情,我的是,我们如何能够服务于需要哪些要求C​​RUD操作HTML文件?

例如,如果我实现了一个论坛,我需要的API来CRUD的帖子在论坛上像


[GET] /论坛 - 查看所有帖子在论坛
[POST] /论坛 - 一个新的职位
[GET] /论坛/:ID - 参见同上一职
[PUT] /论坛/:ID - 修改ID
的信息[删除] /论坛/:ID - 删除的帖子ID

想想我们如何使用一个论坛,我们需要至少3个典型e HTML页面。
他们,
1页看到论坛所有帖子。
2.一个页面查看具体的帖子。
3.一个页面输入标题和内容来创建(或修改)一个新帖子。 HTML文件

第一和第二类可以很容易地通过上述的GET请求提供服务。
但是在第三种HTML文件的情况下,我需要使用上述API的额外参数,或者创建一个新的API,例如/ forum/createpost来提供这样的HTML文件。

我认为,在考虑基于REST的地步,我想念的东西,需要区分提供静态(或动态)HTMLS和处理CRUD请求。

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

+0

看到路由,你最好使用路由和框架为您处理请求的API。你在哪个堆栈工作? – Adriani6

+0

@ Adriani6你的意思是堆栈?好的。对不起我忘记了。我正在使用nodejs并表达。不使用模板引擎并使用纯HTML5和JavaScript,不使用jQuery或Ajax。 – Chickenchaser

回答

1

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

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

+0

所以你的意思是我们可以用相同的方法和URL发送请求,但是不同的'Content-type'。服务器可以通过'Content-type'区分它们,并且可以以不同方式操作或回复。感谢您的回复。 – Chickenchaser

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

+0

感谢您的回复。 : - ) 我已经实现了CRUD APIs,就像你的答案一样! 我需要为发送API请求的HTML文件提供服务。谢谢! – Chickenchaser