2017-10-03 7 views
3

설명하려고하는 API에는 루트 객체가 임의의 수의 자식 객체 (객체 자체의 속성)를 포함 할 수있는 구조가 있습니다. 루트 객체의 "키"또는 속성은 하위 객체의 고유 식별자이며 값은 하위 객체의 나머지 데이터입니다. ,`map` 객체의 속성 이름에 OpenAPI 3 (Swagger) 스펙을 쓰는 방법은 무엇입니까?

[ 
    { "id": "child1", ... bunch of stuff ... }, 
    { "id": "child2", ... bunch of stuff ... }, 
    ... 
] 

하지만이 모두가 식별 속성이 아니라 명시 적보다는 암시 아이들의 ID 고유성이 구조적으로 명확하지 무엇이며 수 있습니다 :

{ 
    "child1": { ... bunch of stuff ... }, 
    "child2": { ... bunch of stuff ... }, 
    ... 
} 

마찬가지로 예를 들어, 배열로 모델링 할 수있다 그래서 우리는 객체 또는지도를 사용하려고합니다.

Model with Map/Dictionary Properties에 대한 스와거 설명서를 보았지만 사용 사례에 맞지 않습니다. 같은 것을 쓰기 :

"Parent": { 
    "additionalProperties": { 
    "$ref": "#/components/schemas/Child", 
    } 

하면이 같은 것을 나타냅니다 :

Swagger rendering of API

이 적절히 속성 값의 descriptiveness을 전달,하지만 어떻게 제한은 "키 무엇 문서화 않습니다 "물건에? 이상적으로는 "어떤 임의의 문자열이 아니라 아이에게 해당하는 ID"와 같은 것을 말하고 싶습니다. 이것은 어떤 방식 으로든 지원됩니까?

+0

관련 항목 : [동적 키 값 해시 맵을 사용하는 복잡한 응답 모델] (https://stackoverflow.com/q/41097913/113116), [명명 된 요소가있는 배열에 대한 허풍 모델] (https : // stackoverflow. com/q/27860912/113116), [Swagger editor 사전 매개 변수 정의] (https://stackoverflow.com/q/41867499/113116) – Helen

+1

이 GitHub 문제는 약간 관련이 있습니다. https://github.com/OAI/OpenAPI - Specifications/Issues/687 – user2152081

답변

0

귀하의 예는 정확합니다.

개체의 "키"에 대한 제한 사항은 어떻게 문서화합니까? 이상적으로는 "어떤 임의의 문자열이 아니라 아이에게 해당하는 ID"와 같은 것을 말하고 싶습니다. 이것은 어떤 방식 으로든 지원됩니까?

OpenAPI는 키가 문자열이라고 가정하지만 키의 내용/형식을 제한 할 방법이 없습니다. description 모델에서 구두로 제한 및 세부 사항을 문서화 할 수 있습니다. 스키마 예제를 추가하면지도가 어떻게 보이는지 알 수 있습니다.

"Parent": { 
    "additionalProperties": { 
    "$ref": "#/components/schemas/Child", 
    }, 
    "description": "A map of `Child` schemas, where the keys are IDs that correspond to the child", 
    "example": { 
    "child1": { ... bunch of stuff ... }, 
    "child2": { ... bunch of stuff ... }, 
    } 

또한 키 형식을 정의 할 수있는 것이다, 스키마에 support for patternProperties을 추가하는 제안이있다. 그러나 OpenAPI 3.0.0부터는 여전히 제안 단계에 있습니다.

+0

더 일반적으로이 질문은 "어떻게 맵에서 키로 문자열에 직렬화 할 수 있습니까?"라고 할 수 있습니다. 그것은 OpenAPI에서 지원되지 않는 동작 인 것 같습니다. – user2152081

+0

@ user2152081 : 이것은 사양을 생성/처리하는 데 사용하는 도구에 따라 달라질 수 있습니다. – Helen