2013-08-18 12 views
0

因此,我花了很多時間編寫一個很酷的RESTful API。爲了簡化,您可以通過執行/usersPOST請求來創建新用戶。讓HTML表單利用JSON API

太好了吧?但是現在我的HTML表單想要創建一個用戶。它的所有元素都與需要傳遞給/users的參數相同。因此,form充分利用這個優秀的API似乎很有意義。

我的表單位於/register.html。它的屬性現在是:action="/users" method="post"。與開箱即用的API完美整合!

問題?我的RESTful API將以JSON響應,而我的表單無法處理此響應。例如,當傳遞一個無效的電子郵件地址時,返回的主體可能是{"error": 400, "msg": "The given email address is invalid."}。相反,register.html應該收到此消息並顯示適當的消息,同時允許用戶修復輸入錯誤。

一個明顯的解決方案是根本不發送表單,而是使用AJAX根據輸入的值與API進行交互。然而,這是遠遠不夠理想的,因爲對於那些沒有Javascript的人來說,表單是沒用的。

有沒有其他方法可以考慮?或者我不應該將表單輸入與我的API結合起來?

我不認爲這很重要,但我正在使用Node.js.

回答

2

一種選擇是雙模式API:接受JSON和表單數據輸入,發回JSON和HTML(或HTML片段)迴應。

HTML片段在無縫的iframe中開始有意義;同時,這種方法仍然需要在客戶端上使用JavaScript。完整的HTML是經典的網頁 - 沒有什麼能夠阻止您的資源既代表HTML也代表JSON。

AcceptContent-Type標題是你的朋友。暫時不要將資源的URL與資源本身的表示混淆起來。這是三件獨立的事情。是的,有時候很混亂。世界就是這樣!

+0

看起來很有趣,但用戶在他的地址欄中看到「/ api/v1/users」會不會令人困惑?他可能會期待'/ register.html'。 – Tom

+0

解決與原始地址register.html不同的地址上的輸入問題的另一個問題是,即使這本質上是相同的頁面,地址也是非常不同的。搜索引擎對此不以爲然,並且會搞砸網站分析。 – Tom

+0

並繼續..如果用戶要刷新頁面(導航到相同的地址),瀏覽器會發送一個GET請求到'/ api/v1/users',它具有完全不同的含義。該請求將檢索所有用戶,這是用戶沒有預料到的。 – Tom