任何已知的java库只返回REST API请求的字段



正在为Spring引导应用程序寻找一个著名的java库,其中,GET api返回一个大小相当大的资源列表。为了减少响应的大小,其中一个约定是只在响应中请求字段。

示例,

GET /v1/users/
{
"data" : 
{
[
{
"name" : "User1",
"phone" : "800-999-9999",
"city" : "XYZ1",
"country" : "PQR1"
},
{
"name" : "User2",
"phone" : "800-999-9999",
"city" : "XYZ2",
"country" : "PQR2"
}
]
}
}

对于较轻版本的响应,当字段作为查询参数传递时

GET /v1/users/?fields=name,city
{
"data" : 
{
[
{
"name" : "User1",
"city" : "XYZ1"
},
{
"name" : "User2",
"city" : "XYZ2"
}
]
}
}

了解更多"教狗休息"。提到了linkedIn、facebook、twilio等的一些做法

我偶然发现"https://github.com/monitorjbl/json-view"。但被球队击落。

有人知道这方面的开源许可项目吗?使用javaspring微服务的组织是如何实现这一功能的?谢谢

这是API设计的难点之一。您需要在使其足够通用以支持几个用例而不添加很少需要的信息之间找到正确的权衡。一种可能性是创建另一个端点。然而,这可能会导致大量端点和糟糕的API设计。

我不完全知道您的用例,但您可以研究GraphQL,而不是REST。在GraphQL中,客户端基本上告诉服务器它想要接收什么信息。

除此之外,stackoverflow上已经有一些帖子可能会有所帮助:

  • 从Spring MVC以JSON形式发送时,动态忽略Java对象中的字段
  • 如何排除Jackson不使用注释的字段

一种可能有效的方法(尚未尝试过(是使用例如flexjson,并在调用JSONSerializer.serialize((时指定要包含在响应中的字段,类似于:

@RequestMapping(value = "/v1/users", method = GET)
@ResponseBody
public String getUserDataReturningOnlyRequestedFields(
@RequestParam(List<String> fields) {
... obtain user data DTO containing entire response ...
... create comma-delimited string from fields list ...
return new JSONSerializer().include(comma-delimited fields).serialize(dto);
}

最新更新