【问题标题】:Rest: filering on Json response to save bandwidth休息:过滤 Json 响应以节省带宽
【发布时间】:2017-10-12 10:40:27
【问题描述】:

我有休息服务,不是休息。 该模块是无状态的,只是暴露了一些剩余端点:接收请求,对其进行转换,调用外部端点,然后编写 Json 响应。

问题是响应很冗长,有些字段很大。

我被要求在请求级别提供过滤,以便响应仅包含请求的数据。

举个例子:我暴露的方法是一个POST,接受一个BASE64编码的图片,响应也可以包含图片,还有很多其他字段:

request: { image="<here a long BASE64 encoded request>"}

response: {result="success", 
    message="it was a success", 
    responseImage="<another base64 encoded image>", 
    longArray1=[
        {first="...", second="...", third="..."},
        {first="...", second="...", third="..."},
        ....many!
    ],
    longArray2=[
        {first2="...", second2="...", third2="..."},
        {first2="...", second2="...", third2="..."},
        ....many!
    ]
}

我想要的是避免重新发明轮子。是否有已知的查询模式(在 queryString 或 Json 请求中添加内容,以及如何),以便消费者可以提前选择接收哪些字段作为响应,并在响应中节省带宽?

【问题讨论】:

  • 您应该向我们提供您的想法。那么我们是否有更好的方法会更容易说。
  • 我在查询字符串中传递了一些参数(最多 3 个),并使用该值来过滤响应。我想实现一个过滤器类,它在过滤器映射中收集,这样当我填充响应时,我只有一个参数(过滤器对象)并询问他是否必须包含当前值。跨度>
  • 问题是一些过滤器必须在参数级别操作(如响应图像过滤器:图像只是进或出)和其他在数组值级别(例如,如果 longArray1 的过滤器是 FAILED_ONLY,如果“first”是“FAILED”,我必须显示该项目,如果它是“PASSED”,我必须隐藏它)。还在开发中(其实挂了,我还有更紧急的事情要做)

标签: java json rest post design-patterns


【解决方案1】:

拥有一个过滤器类的想法是个好主意。您的 Filter 类应提供反映响应对象的字段,并对未提供的字段使用默认值。例如。如果您的 api 用户未在其请求中传递任何 json 序列化过滤器对象,他们仍应使用默认过滤器接收数据。扩展您的示例,请求看起来像

request: { 
     image="<here a long BASE64 encoded request>",
     requestFilters:{   
     responseImage="<another base64 encoded image>", 
     longArray1={ firstFilter:"PASSED_ONLY",
            secondFilter:"FAILED_ONLY",            
            ....many!
        },
     longArray2={ // using defaults for firstFilter and secondFilter
            thirdFilter="PASSED", 
            fourthFilter="FAILED",
            ....many!
        }
     ......
    }
}

希望对您有所帮助。

【讨论】:

  • 谢谢,我做了类似的事情,但我决定使用可选的查询字符串,以便在请求(Json 格式,强制)和过滤器之间分开,查询字符串是可选的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 2010-09-17
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多