我有一個路徑,它爲每個http方法使用幾乎具有相同屬性的複雜模型。問題是我想爲PUT和POST的請求定義一些所需的屬性,而GET響應中不需要屬性(因爲服務器始終返回所有屬性,並且在文檔的其他地方提到了它)。具有不同所需屬性的重複使用模型
我創建了一個簡單的貓API來演示我所嘗試過的。這個想法是,對於GET響應,響應模型沒有任何標記,但是PUT的請求必須有一個貓的名字。
swagger: "2.0"
info:
title: "Cat API"
version: 1.0.0
paths:
/cats/{id}:
parameters:
- name: id
in: path
required: true
type: integer
get:
responses:
200:
description: Return a cat
schema:
$ref: "#/definitions/GetCat"
put:
parameters:
- name: cat
in: body
required: true
schema:
$ref: "#/definitions/PutCat"
responses:
204:
description: Cat edited
definitions:
Cat:
type: object
properties:
name:
type: string
GetCat:
allOf:
- $ref: "#/definitions/Cat"
properties:
id:
type: integer
PutCat:
type: object
required:
- name
properties:
$ref: "#/definitions/Cat/properties"
揚鞭編輯說,這是一個有效的規範,但name
作爲要求都設置GET和PUT。 Swagger UI也一樣。
我也試過PutCat以下版本:
PutCat:
type: object
required:
- name
allOf:
- $ref: "#/definitions/Cat"
但現在一切是可選的。
我無法弄清楚這一點。有沒有辦法正確地做到這一點?
編輯:
由於Helen正確提到的,我可以用readOnly
解決與GET和PUT這種特殊情況下。
但是讓我們說,我添加breed
財產必須提供(除了name
屬性)爲PUT。然後我添加PATCH方法,它可以用來更新breed
或name
而另一個保持不變,並且我不想根據需要設置那些。
謝謝,解決了這個例子中的問題。然而,我對我的例子有點粗心,並且更新了這個問題,即爲部分更新添加一個PATCH方法而不需要任何東西。 – NotNone
@NotNone:我更新了答案。 – Helen
謝謝,但現在看起來PATCH也需要名稱和品種(Swagger編輯器中都有星號)。這與原始問題中的問題相同。 我相信目前還沒有解決方案。 – NotNone