[英]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.