2016-09-20 4 views
0

하나의 키의 기본 응답에 식별자 배열이있는 API가 있습니다. 사용자는 여분의 매개 변수를 전달할 수 있으므로 배열은 문자열 배열의 객체 배열로 바뀝니다 (별도의 호출을 수행하지 않고 실제 세부 정보가 필요함).어떤 "oneOf"API 응답이 사용할 것인지 어떻게 알 수 있습니까?

"children": { 
    "type": "array", 
    "items": { 
    "oneOf": [{ 
     "type": "string", 
     "description": "Identifier of child" 
    }, { 
     "type": "object", 
     "description": "Contains details about the child" 
    }] 
    } 
}, 

첫 번째 유형이 기본값이되고 두 번째 유형이 요청한 매개 변수를 통해 제공됨을 나타내는 방법이 있습니까?

+0

새 속성으로 oneOf 모델을 확장하고 서버 측에서 설정합니까? –

+0

이해가 안 되니? 나는 http://json-schema.org/을 참조하고있다. –

답변

0

구별로 무엇을 달성하려고하는지 완전히 명확하지 않습니다. 실제로 그것은 문서처럼 들립니다. 각 oneOf 서브 스키마의 description에서 정교 할 수 있습니다.

최상위 레벨 (형제가 children)에 추가 부울 필드를 추가하여 자세한 응답이 반환되는지 여부를 나타내고 해당 필드의 기본값을 제공 할 수 있습니다. 다음 단계는 부울 값을 배열 항목의 유형에 연결하는 것입니다.이 작업은 oneOf을 사용하여 수행했습니다.

나는의 라인을 따라 뭔가 제안 해요 : 응답 오브젝트에

{                    
    "children": {                 
    "type": "array",                
    "items": {                 
     "oneOf": [                 
     {                  
      "type": "string",              
      "description": "Identifier of child", 
      "pattern": "^([A-Z0-9]-?){4}$"         
     },                  
     {                  
      "type": "object",              
      "description": "Contains details about the child", 
      "properties": { 
      "age": { 
       "type": "number" 
      } 
      }      
     }                  
     ]                   
    }                   
    },                    
    "detailed": {                 
    "type": "boolean",               
    "description": "If true, children array contains extra details.",   
    "default": false                
    },                    
    "oneOf": [                  
    {                   
     "detailed": {                
     "enum": [                
      true                 
     ]                  
     },                   
     "children": {                
     "type": "array",               
     "items": {                
      "type": "object"              
     }                  
     }                   
    },                   
    {                   
     "detailed": {                
     "enum": [                
      false                 
     ]                  
     },                   
     "children": {                
     "type": "array",               
     "items": {                
      "type": "string"              
     }                  
     }                   
    }                   
    ]                    
} 

두 번째 oneOf 장소 추가 요구 사항을 그 때 "detailed": true 배열은 "개체"여야 "아이들"의 항목 유형 . 이렇게하면 "children"배열의 개체 스키마를 설명하는 첫 번째 oneOf 제한이 구체화됩니다.

+0

나는'detailed'가 응답으로 표시된다는 것을 보았는데 (단지 쿼리 매개 변수가 들어간 것만 제외하면), 실제로 반환되지는 않으며 단지 doc 여기에 목적이있다. 'detailed' 이후에 여분의'oneOf'에 대한 필요성 때문에 길을 잃습니다. 첫 번째'oneOf'가'$ ref'에 의지하고 나중에'oneOf'보다는'definitions'을 사용하고자하는 것 같습니다 –

+0

'oneOf's 사이에 아무것도 공유하지 않습니다; 그들은 의도적으로 중첩되지만, 그들은 다른 것을 말하고 있습니다. 시도하고 명확히하기 위해 내 대답을 업데이트했습니다. – wachr