您可以在單一行中要求整個工具包
//> using toolkit latest
或者,您也可以只要求 sttp 的特定版本
//> using dep com.softwaremill.sttp.client4::core:4.0.0-M1
在您的 build.sbt 檔案中,您可以新增對 Toolkit 的相依性
lazy val example = project.in(file("example"))
.settings(
scalaVersion := "3.2.2",
libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7"
)
或者,您也可以只要求 sttp 的特定版本
libraryDependencies += "com.softwaremill.sttp.client4" %% "core" % "4.0.0-M1"
在您的 build.sc 檔案中,您可以新增對 Toolkit 的相依性
object example extends ScalaModule {
def scalaVersion = "3.2.2"
def ivyDeps =
Agg(
ivy"org.scala-lang::toolkit:0.1.7"
)
}
或者,您也可以只要求 sttp 的特定版本
ivy"com.softwaremill.sttp.client4::core:4.0.0-M1"
uri
插補器
uri
是自訂的 字串插補器,讓您可以建立有效的網路位址,也稱為 URI。例如,您可以寫 uri"https://example.com/"
。
您可以使用一般的 $
或 ${}
語法在 URI 中插入任何變數或運算式。例如 uri"https://example.com/$name"
,會將變數 name
的值插補到 URI 中。如果 name
包含 "peter"
,結果會是 https://example.com/peter
。
uri
會自動跳脫特殊字元,如下例所示
import sttp.client4.quick._
import sttp.model.Uri
val book = "programming in scala"
val bookUri: Uri = uri"https://example.com/books/$book"
println(bookUri)
// prints: https://example.com/books/programming%20in%20scala
import sttp.client4.quick.*
import sttp.model.Uri
val book = "programming in scala"
val bookUri: Uri = uri"https://example.com/books/$book"
println(bookUri)
// prints: https://example.com/books/programming%20in%20scala
查詢參數
查詢參數是附加在 HTTP 要求 URI 結尾的鍵值配對,用來指定有關要求的額外詳細資料。網路伺服器可以使用這些參數來計算適當的回應。
例如,考慮以下 URL
https://example.com/search?q=scala&limit=10&page=1
它包含三個查詢參數:q=scala
、limit=10
和 page=1
。
使用查詢參數的對應
uri
內插器可以內插 Map[String, String]
作為查詢參數
val queryParams = Map(
"q" -> "scala",
"limit" -> "10",
"page" -> "1"
)
val uriWithQueryParams = uri"https://example.com/search?$queryParams"
println(uriWithQueryParams)
// prints: https://example.com/search?q=scala&limit=10&page=1
為了安全起見,參數中的特殊字元會自動由內插器轉譯。
使用選用查詢參數
查詢參數可能是選用的。uri
內插器可以內插 Option
def getUri(limit: Option[Int]): Uri =
uri"https://example.com/all?limit=$limit"
println(getUri(Some(10)))
// prints: https://example.com/all?limit=100
println(getUri(None))
// prints: https://example.com/all
請注意,當 limit
為 None
時,查詢參數會完全消失。
使用序列作為單一查詢參數的值
查詢參數可以在 URI 中重複,以表示值清單。例如,?version=1.0.0&version=1.0.1&version=1.1.0
中的 version
參數包含 3 個值:1.0.0
、1.0.1
和 1.1.0
。
要在 URI 中建置此類查詢參數,您可以在 uri"..."
中內插 Seq
(或 List
、Array
等)。
def getUri(versions: Seq[String]): Uri =
uri"https://example.com/scala?version=$versions"
println(getUri(Seq("3.2.2")))
// prints: https://example.com/scala?version=3.2.2
println(getUri(Seq("2.13.8", "2.13.9", "2.13.10")))
// prints: https://example.com/scala?version=2.13.8&version=2.13.9&version=2.13.10
println(getUri(Seq.empty))
// prints: https://example.com/scala