任何知名的Java库都只返回REST API请求的字段

时间:2019-11-07 19:44:43

标签: java rest api spring-boot microservices

正在寻找一个著名的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"
         }
     ]
   }
}

要了解更多“ Teach a dog to REST”。在linkedIn,facebook,twilio等中提到了一些做法。

我遇到了“ https://github.com/monitorjbl/json-view”。但是被团队击落了。

有人知道这个开源许可项目吗?使用Java Spring微服务的组织如何实现此功能?谢谢!

2 个答案:

答案 0 :(得分:1)

这是API设计中的难题之一。您需要在使其足够通用以支持多个用例而无需添加很少需要的信息之间找到正确的权衡。一种可能性是创建另一个端点。但是,这可能会导致很多端点和错误的API设计。

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

除此之外,关于stackoverflow的文章已经很多,这可能会有所帮助:

答案 1 :(得分:0)

一种可能有效(尚未尝试过)的方法是使用例如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);
}