什麼是使僕人處理程序以重定向響應的適當方式?我正在導航REST應用程序中工作,我想響應POST請求,通過重定向到相應的GET資源列表路徑創建資源。因此,例如POST/foos應在創建foo後重定向到GET/foos。我無法在文檔中找到明確的方法。僕人中的重定向
僕人中的重定向
回答
有一個簡單的(但有點冒險的)答案,並且使得第一個選項過時(編輯:和第三個,更好的選項,實際上)。
這個目前典型的解決方案是簡單地使用該Handler
單子有MonadError ServantErr
實例的事實,那ServantErr
是一個非常普遍的「反應型」確實可以描述爲一個應用程序錯誤的HTTP響應,但也重定向或其他許多事情。所以你可以做點像throwError $ err301 { errHeaders = [("Location", "https://haskell.org/")] }
。這很醜陋,因爲我們劫持了一些成功的工作流程的「錯誤」位。但它有效,並且是一行代碼。
我已經探索了其他方法,可以讓您將類型安全的鏈接與重定向混合在一起,輕鬆地重定向到您應用的其他端點/頁面。現在已經過時,但可能可以在沒有太多麻煩的情況下工作。
在看到這個問題時,我剛纔想到了第三個選項。花了一點時間來試驗它,看起來像是有效的!您可以通過在this gist中使用它的示例查看代碼。如果您有任何問題,請告訴我。我們可能想將這些添加到僕人。如果您認爲這已經足夠好,請隨時在問題跟蹤器中提出。這種方法的要點是定義一個自定義的PostRedirect
,它具有正確的形狀(沒有響應主體,具有您選擇的類型的位置標題,以及您希望重定向使用的狀態代碼參數化)以及一個小函數在返回之前適當地包裝位置。
謝謝!我認爲這對僕人來說是一個很好的補充。 – Jesuspc
- 1. 僕人執行
- 2. 僕人用`enter`
- 3. 僕人和物體 - 關係
- 4. 重定向某人
- 5. 在僕人中生成端點描述
- 6. CORBA IDL + + Java的:寫作僕人
- 7. SSL重定向他人頁
- 8. Haskell僕人和流式傳輸
- 9. 獨立鹽僕人沉默失敗
- 10. 捨棄CORBA僕人叫「servant_to_reference」後
- 11. 使用failWith與僕人和定製單子堆棧
- 12. 的ImportError用於與僕人CV2中的virtualenv
- 13. Python JIRA SOAPpy惱人的重定向findIssue
- 14. 機器人的通用IP重定向
- 15. PHP假推薦人多重定向
- 16. 人們如何防止307重定向
- 17. htaccess 301重定向機器人
- 18. 只重定向谷歌機器人
- 19. 如何用.HTACCESS重定向某人?
- 20. 人羣SSO域名重定向
- 21. 機器人和301重定向
- 22. WURFL重定向facebook機器人
- 23. 如何重定向客人從登錄
- 24. 谷歌聯繫人API - 無重定向
- 25. 反應私人路由重定向
- 26. 服務人員打破301重定向
- 27. 在僕人中發送通用內容類型
- 28. 重定向重定向CakePHP3
- 29. 使用認證通過一個定製的閱讀器單子隨着僕人
- 30. 301重定向htaccess的重定向URL
我個人認爲這不是好的做法。 POST本身應該返回數據(用服務器填充的ID等)。否則,您會強制客戶端無理由再執行一次HTTP請求。 – mb21
如果我這樣做,瀏覽器將顯示錶單重新發送的警報,如果我在表單提交後單擊刷新並且創建操作已返回新的html內容。 – Jesuspc
啊,是的,我可以看到這對於基於表單的HTML API是有意義的......我在想JSON。 – mb21