其余:在Json响应文件夹以节省带宽
问题描述:
我有一个休息服务,而不是restfull。 该模块是无状态的,只是公开一些休息endopoints:接收请求,转换它,调用外部endopints,然后组成一个Json响应。其余:在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请求中添加某些内容,以及如何),以便消费者可以事先选择接收哪些字段作为响应,并在响应中节省带宽?
答
有一个Filter类的想法是一个好主意。您的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!
}
......
}
}
希望有所帮助。
+0
谢谢,我做了类似的事情,但我决定使用可选的查询字符串,以便请求(Json格式,必选)和过滤器,查询字符串可选。 – marco
您应该向我们提供您正在考虑的事情。那么我们就会更容易说出是否有更好的方法。 – palsrealm
我传递查询字符串中的一些参数(最多3个),并使用该值筛选响应。我想实现一个Filter类,它收集过滤器的映射,所以当我填充响应时,我只有一个参数(过滤器对象),并询问他是否必须包含当前值。 – marco
问题在于某些过滤器必须在参数级别上运行(如响应图像过滤器:图像刚刚输入或输出)以及其他数组值(例如,如果longArray1的过滤器为FAILED_ONLY,如果“first”为“FAILED “我必须展示该物品,如果它是”通过“,我必须隐藏它)。它仍在开发中(实际上,我有更紧急的事情要做) – marco