开放式API在路径中将一个组件包含在另一个组件中



我认为我的问题的标题不是很明确,所以我会在这里更好地解释它。

我目前正在用OpenAPI 3规范编写我的API文档,我有一个小问题。

我创建了两个组件"Units"one_answers"MeasuresTypes"。我的API中的一种方法是检索单位,另一种是检索度量类型。第一个允许返回组件"Units",第二个"MeasuresTypes"也包含组件"Unit斯"。

我的问题是,我找不到如何在"MeasuresTypes"路径中集成"MeasuresTypes"中的"Units"组件。

以下是我的json文件的摘录:

{
"openapi" : "3.0.0",
"servers" : [ {
"url" : "https://example.com/api/"
} ],
"info" : {
"version" : "0.0.3",
"title" : "API PassCare Bêta",
"description" : "API PassCare en version bêta (Dernière mise à jour le 09/07/2018)"
},
"paths" : {
"/measuresunits?accesstoken={accesstoken}" : {
"get" : {
"summary" : "Récupération de la liste des unités de mesures (hors posologie)",
"description" : "Cette méthode permet de récupérer les unités de mesures qui seront utilisées ",
"parameters" : [ {
"name" : "accesstoken",
"in" : "path",
"required" : true,
"description" : "Token d'accès obtenu via 'Obtention du token d'accès'",
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
"description" : "Tableau JSON contenant les unités",
"content" : {
"application/json" : {
"schema" : {
"type" : "array",
"items" : {
"type" : "object",
"$ref" : "#/components/schemas/Units"
}
}
}
}
}
}
}
},
"/measurestypes?accesstoken={accesstoken}" : {
"get" : {
"summary" : "Récupération de la liste des types de mesures",
"description" : "Cette méthode permet de récupérer les types de mesures qui peuvent être utilisées dans l'API",
"parameters" : [ {
"name" : "accesstoken",
"in" : "path",
"required" : true,
"description" : "Token d'accès obtenu via 'Obtention du token d'accès'",
"schema" : {
"type" : "string"
}
}
],
"responses" : {
"200" : {
"description" : "Tableau JSON contenant les types de mesures",
"content" : {
"application/json" : {
"schema" : {
"type" : "array",
"items" : {
"type" : "object",
"$ref" : "#/components/schemas/MeasuresTypes",
//include Units here
}
}
}
}
}
}
}
}
},
"components" : {
"schemas" : {
"Patients": {
"type" : "object",
"properties" : {
"firstname" : {
"type" : "string",
"description" : "Prénom",
"example" : "Jean"
},
"lastname" : {
"type" : "string",
"description" : "Nom",
"example" : "Dupont"
},
}
},
"Units": {
"type" : "object",
"properties" : {
"name" : {
"type" : "string",
"description" : "Unité",
"example" : "Cigarette"
},
"plural_name" : {
"type" : "string",
"description" : "Unité au pluriel",
"example" : "Cigarettes"
},
"api_slug" : {
"type" : "string",
"description" : "Slug",
"example" : "cigarette"
}
}
},
"MeasuresTypes": {
"type" : "object",
"properties" : {
"name" : {
"type" : "string",
"description" : "Nom du type de mesure",
"example" : "Taille"
},
"slug" : {
"type" : "string",
"description" : "Slug",
"example" : "height"
},
"round_number" : {
"type" : "int",
"description" : "Nombre de chiffres conservés après la virgule",
"example" : "0"
}
}
}
}
}
}

这是预期的响应:

[
{
"name": "Taille",
"slug": "height",
"round_number": "0",
"unit": {
"name": "cm",
"plural_name": "cm",
"api_slug": "cm"
}
}
]

有人能帮我找到一个好的解决方案吗?

提前感谢!

您应该在您的案例中使用allOf关键字。未经测试:

"responses" : {
"200" : {
"description" : "Tableau JSON contenant les types de mesures",
"content" : {
"application/json" : {
"schema" : {
"type" : "array",
"items" : {
"allOf": [
{
"$ref" : "#/components/schemas/MeasuresTypes",  
},
"type": "object",
"properties": {
"unit": {
"$ref" : "#/components/schemas/Units"  
}
}
]
}
}
}
}
}
}

最新更新