簡體   English   中英

在GET調用查詢參數中構造JSON數據

[英]Structuring json data in GET call query parameters

我試圖將以下對象的列表作為查詢參數傳遞給對Java服務的GET調用:

{
    "id": "123456",
    "country": "US",
    "locale": "en_us"
}

作為網址,這想

GET endpoint.com/entity?id1=123456&country1=US&locale1=en_us&id2=...

將此作為服務進行處理的最佳方法是什么? 如果我可能要傳遞15個這些對象,是否有一種簡便的方法來接收這些參數並將它們轉換為服務器端的Java對象?

我想使用這樣的URL,服務控制器將有很多@QueryParams ...

將整個數據集創建為JSON數組,例如

[
  {
    "id": "123456",
    "country": "US",
    "locale": "en_us"
  },
  {
    "id": "7890",
    "country": "UK",
    "locale": "en_gb"
 }
]

base64對其進行編碼並將其作為參數傳遞,例如

GET endpoint.com/entity?set=BASE64_ENCODED_DATASET

然后在服務器上解碼,然后使用Spring Boot將JSON數組解析為Java對象。

根據有效的URL大小注釋(盡管可以使用2000),您可以將數據放在標頭中,該標頭的大小可以為8-16kb,具體取決於服務器。 一次獲取多個資源將涉及設計中的某處折衷。

由於Base64可以包含+/=您也可以對其進行url編碼,盡管在實踐中我沒有發現在SAML中使用此技術時需要這樣做。

另一種方法是通過國家和地區特定的ID進行折衷搜索:

GET endpoint.com/entity/{country}/{locale}/{id_csv}

所以你會這樣搜索:

GET endpoint.com/entity/US/en_us/123456,0349,23421

您的后端將{country}{locale} @PathParam (如果使用Spring)作為@PathParam進行處理,並且它將{id_csv}拆分為該國家/地區組合的ID列表。

要獲取其他國家/地區搜索:

GET endpoint.com/entity/UK/en_gb/7890,234,123232

URL很小,但是您無法一次查詢整個數據集,因為每次都需要根據國家/地區查詢。

看起來您的GET正在從服務器獲取多個資源。 我會考慮將每個GET請求從服務器重構為GET 1資源。 如果這導致性能問題,請考慮使用HTTP緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM