2017-10-12 3 views
0

나는 restfull이 아닌 휴식 서비스를 제공합니다. 이 모듈은 상태가없고 일부 나머지 엔도 포인트를 노출합니다. 요청을 수신하고 변환 한 다음 외부 엔도 핀트를 호출 한 다음 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 인 경우, "첫 번째"가 "실패"인 경우 "아이템을 보여 주어야합니다."PASSED "라면 그것을 숨겨야합니다.) 그것은 아직 개발 중입니다 (실제로는 걸려, 내가 할 일이 더 긴급하다) – 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

관련 문제