2017-10-12 48 views
0

我有一个休息服务,而不是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请求中添加某些内容,以及如何),以便消费者可以事先选择接收哪些字段作为响应,并在响应中节省带宽?

+0

您应该向我们提供您正在考虑的事情。那么我们就会更容易说出是否有更好的方法。 – palsrealm

+0

我传递查询字符串中的一些参数(最多3个),并使用该值筛选响应。我想实现一个Filter类,它收集过滤器的映射,所以当我填充响应时,我只有一个参数(过滤器对象),并询问他是否必须包含当前值。 – marco

+0

问题在于某些过滤器必须在参数级别上运行(如响应图像过滤器:图像刚刚输入或输出)以及其他数组值(例如,如果longArray1的过滤器为FAILED_ONLY,如果“first”为“FAILED “我必须展示该物品,如果它是”通过“,我必须隐藏它)。它仍在开发中(实际上,我有更紧急的事情要做) – marco

回答

0

有一个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

相关问题