开放式API在路径中的另一个内部包含一个组件

时间:2018-07-10 09:34:11

标签: json openapi

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

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

我创建了两个组件“ Units”和“ MeasuresTypes”。我的API中的一种方法是检索单位,另一种方法是检索测量类型。第一个允许返回组件“ Units”,第二个允许返回“ MeasuresTypes”,其中还包含组件“ Units”。

我的问题是我找不到如何在“ 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"
    }
  }
]

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

谢谢!

1 个答案:

答案 0 :(得分:0)

在您的情况下,您应该使用allOf keyword。尚未测试:

> using Microsoft.AspNetCore.Mvc; using Github.Models; using System;
> using System.Collections.Generic; using System.Linq; using
> System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.Rendering;
> using Microsoft.EntityFrameworkCore;