2017-08-02 108 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