私は、httpメソッドごとにほとんど同じプロパティを持つ複雑なモデルを使用するパスを持っています。問題は、をのPUTとPOSTの要求に必要なプロパティを定義したいが、GETレスポンスではプロパティは必要ないということです(サーバーは常にすべてのプロパティを返し、ドキュメントのどこかで言及しています)。異なる必要なプロパティを持つモデルを再利用する
シンプルなcat 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"
闊歩エディタはこれが有効な仕様であることを述べているが、GETやPUTの両方のために必要とされるname
が設定されています。 SwaggerのUIも同じです。
私もPutCatの次バージョン試してみました:
PutCat:
type: object
required:
- name
allOf:
- $ref: "#/definitions/Cat"
をしかし、今ではすべてはオプションです。
私はこれを理解できません。これを正しく行う方法はありますか?
EDIT:正しく述べ
Helenとして、私は、GETやPUTと、この特定のケースを解決するためにreadOnly
を使用することができます。
しかし、PUTに(name
プロパティに加えて)提供する必要があるbreed
プロパティを追加するとします。次に、breed
またはname
を更新するために使用できるPATCHメソッドを追加しますが、もう一方は変更されず、必要に応じてどちらも設定しません。
ありがとうございます、これは例の問題を解決します。しかし、私は私の例で少し不注意だったし、何も必要ない部分的な更新のためにPATCHメソッドを追加するというシナリオで質問を更新しました。 – NotNone
@NotNone:答えを更新しました。 – Helen
ありがとうございましたが、名前と品種の両方がPATCHに必要なように見えます(Swagger Editorの後にアスタリスクがあります)。これは元の質問と同じ問題です。 私は今のところこのための解決策がないと信じています。 – NotNone