首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala读取API完全响应

Scala读取API完全响应
EN

Stack Overflow用户
提问于 2022-07-15 12:14:37
回答 1查看 44关注 0票数 0

我正在使用一个分页API,并希望动态地读取每个页面的Json。我已经使用while循环实现了这一点,当我阅读了最后一页的Json时,我想打破它

代码语言:javascript
复制
var pageNumber = 1
val pageSize = 1000
while (pageNumber >= 1) {
  println("Inside the while loop!" + pageNumber)
  url = url.concat("OWNER_MI_KEY&dataset_version=v1.1&pageNumber=$pageNumber&pageSize=$pageSize")
  val apiResponse = MakePostHttpRestCalls(url) // makes request to external rest endpoint
 if (apiResponse != ""){
    println("Got api response")
    println("apiResponse :" + apiResponse)
    val apiJson = parseApiResponse(apiResponse)//parses the json response
    println("apiJson :" + apiJson)
    if (apiJson.length == 0){
        pageNumber = pageNumber + 1
    }
  }
}

对于如何在代码中实现这一点,有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-07-15 14:39:22

进一步我的评论,这里有一个粗略的想法,它看起来可能是一个递归函数,这是Scala设计用来做这种事情的函数方式。

代码语言:javascript
复制
def readResponsePages(pageSize: Int) = {
  def loop(pageNumber: Int, responses: List[String]): List[String] = {
    println("Inside the loop!" + pageNumber)

    val thisUrl = url.concat(
      s"OWNER_MI_KEY&dataset_version=v1.1&pageNumber=$pageNumber&pageSize=$pageSize"
    )

    MakePostHttpRestCalls(thisUrl) match {
      case "" =>
        responses.reverse
      case apiResponse =>
        println("Got api response")
        println("apiResponse :" + apiResponse)
        val apiJson = parseApiResponse(apiResponse) //parses the json response
        println("apiJson :" + apiJson)

        loop(pageNumber + 1, apiJson +: responses)
    }
  }

  loop(1, Nil)
}

val responsePages = readResponsePages(1000)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72993842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档