2015-01-04 18 views
1

我正在構建一個R/Shiny應用程序,該應用程序在通過HTTP GET調用時應執行一些代碼,這與第一個回答爲this question非常相似。現在,當我通過網絡瀏覽器查看應用程序時,該應用程序運行良好,但我想要的是真正能夠在網絡瀏覽器外部遠程調用應用程序,例如,通過來自cURL或服務器端javascript的HTTP GET調用,並使用URL參數作爲輸入來執行代碼。通過HTTP GET(例如cURL)調用Shiny應用程序執行代碼

如果我請訪問以下網址在我的網頁瀏覽器(假設閃亮的應用程序是在本地主機上運行),一切都工作得很好:

http://127.0.0.1:8000/?param1=val1&param2=val2 

但如果我不是調用同一個URL中使用捲曲,沒什麼發生(除了HTML爲閃亮應用返回):

curl -X GET http://127.0.0.1:8000/\?param1=val1\&param2=val2 

我的應用程序被基本上構建爲當在所述第一答案(由用戶@jdharrison)上面鏈接的問題的示例的應用的擴展,它僅還執行一些專門服務器端的代碼(即, .E。對用戶不可見並且不在前端返回),因此應該足以作爲代碼示例:

library(shiny) 
runApp(list(
    ui = bootstrapPage(
    textOutput('text') 
), 
    server = function(input, output, session) { 
    output$text <- renderText({ 
     query <- parseQueryString(session$clientData$url_search) 
     paste(names(query), query, sep = "=", collapse=", ") 
    }) 
    } 
), port = 5678, launch.browser = FALSE) 

非常感謝提前!

回答

3

如果生成的HTML包含Javascript,在瀏覽器中的執行將與Curl中的執行有很大不同,因爲後者不會執行Javascript部分。

+0

這是一個好點 - 也許整個設計理念從一開始就是錯誤的。但是,核心問題仍然存在:是否可以使用Shiny以類似於通用RESTful API的方式構建工作Web API,可通過通用GET訪問? – LCHansson 2015-01-04 15:46:29

+2

@LCHansson是的,我認爲使用Shiny的想法是錯誤的。沒有JavaScript和WebSockets,閃亮可能沒有用處。我建議你從Shiny的依賴項開始,改爲[httpuv](http://cran.rstudio.com/package=httpuv)。 – 2015-01-04 19:43:23

+0

@易輝,對於遲到的答案感到抱歉。您的評論正是我所期待的那種指針。如果你願意將評論轉換爲答案,我很樂意將其標記爲解決方案。謝謝! – LCHansson 2015-01-11 17:51:44

相關問題