gpt4 book ai didi

json - 使用 R 的 Plumber - 创建 GET 端点来托管 CSV 格式的数据而不是 JSON

转载 作者:行者123 更新时间:2023-12-01 09:14:09 25 4
gpt4 key购买 nike

我认为这是一个很好的 R 管道工库的快速演示,但主要是我正在努力以 csv 格式提供数据

我正在使用 R 的管道工包来为我的一些运动数据托管 API 端点。目前,我有一些数据可以获取我尝试服务的 MLB 棒球队的获胜总数。使用管道工,我设置了以下 2 个脚本:

setupAPI.R :使用两个 GET 端点设置我的 API:

library(plumber)
library(jsonlite)

# load in some test sports data to host
mydata = structure(list(Team = structure(c(8L, 20L, 7L, 28L, 2L, 30L,
23L, 1L, 6L, 19L), .Label = c("Angels", "Astros", "Athletics",
"Blue Jays", "Braves", "Brewers", "Cardinals", "Cubs", "Diamondbacks",
"Dodgers", "Giants", "Indians", "Mariners", "Marlins", "Mets",
"Nationals", "Orioles", "Padres", "Phillies", "Pirates", "Rangers",
"Rays", "Red Sox", "Reds", "Rockies", "Royals", "Tigers", "Twins",
"White Sox", "Yankees"), class = "factor"), GamesPlayed = c(162L,
162L, 162L, 162L, 162L, 162L, 162L, 162L, 162L, 162L), CurrentWins = c(92L,
75L, 83L, 85L, 101L, 91L, 93L, 80L, 86L, 66L)), .Names = c("Team",
"GamesPlayed", "CurrentWins"), row.names = c(NA, 10L), class = "data.frame")

# create a GET request for shareprices (in JSON format)
#* @get /shareprices_json
getSPs <- function(){
return(toJSON(mydata))
}

# create a GET request for MLB shareprices (in CSV format)
#* @get /shareprices_csv
csvSPs <- function(){
return(mydata)
}

# run both functions (i think needed for the endpoints to work)
getSPs()
csvSPs()

运行API.R :plumb 的 setupAPI.R,获取本地托管的端点
library(plumber)
r <- plumb("setupAPI.R")
r$run(port=8000)

.
.
.

在我的控制台中运行 RunAPI.R 代码后,当我转到端点时,我的 http://127.0.0.1:8000/shareprices_csv端点显然正在返回一个 JSON 对象,而我的 http://127.0.0.1:8000/shareprices_json端点似乎奇怪地返回长度为 1 的 JSON,字符串中的 JSON 作为返回的 JSON 中的唯一元素。

简而言之,我现在可以看到我应该简单地返回数据帧,而不是 toJSON(数据帧),以使端点主机 JSON 格式的数据,但是我仍然不知道如何以 CSV 格式提供这些数据。这在水管工中可能吗? setupAPI.R 中的函数中的 return 语句应该是什么样的?任何帮助表示赞赏!

最佳答案

这里有两个技巧:

  • 您可以通过直接返回响应对象来绕过端点上的序列化。更多文档 here
  • 您可以通过改变 res$body 来指定响应的主体。 .

  • 您可以结合这两个想法来创建一个端点,例如:
    #' @get /data.csv
    function(res) {
    con <- textConnection("val","w")
    write.csv(iris, con)
    close(con)

    res$body <- paste(val, collapse="\n")
    res
    }

    请注意,管道工免费为您做了一些好事,例如为您的 JSON 响应设置适当的 HTTP header 。如果您自己发送响应,则所有这些都由您自己承担,因此您需要确保设置适当的 header 以教导 API 客户端如何解释此响应。

    关于json - 使用 R 的 Plumber - 创建 GET 端点来托管 CSV 格式的数据而不是 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49141217/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com