Mam ścieżkę, która używa złożonych modeli o prawie identycznych właściwościach dla każdej metody http. Problem polega na tym, że chcę zdefiniować pewne wymagane właściwości dla żądania PUT i POST, podczas gdy w odpowiedzi GET nie są wymagane żadne właściwości (ponieważ serwer zawsze zwraca wszystkie właściwości i jest wspomniany w innym miejscu w dokumentacji).Ponowne użycie modelu z różnymi wymaganymi właściwościami
Stworzyłem prosty API dla kotów, aby pokazać, co próbowałem. Chodzi o to, że w przypadku odpowiedzi GET model odpowiedzi nie ma niczego oznaczonego jako wymagane, ale żądanie PUT musi mieć nazwę dla kota.
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"
Swagger redaktor mówi, że jest to ważna specyfikacja, ale name
jest ustawiona jako wymagana zarówno GET i PUT. To samo dotyczy interfejsu użytkownika Swagger.
Próbowałem również wersję PutCat:
PutCat:
type: object
required:
- name
allOf:
- $ref: "#/definitions/Cat"
Ale teraz wszystko jest opcjonalne.
Nie mogę tego obliczyć. Czy istnieje sposób, aby to zrobić właściwie?
EDIT:
Jak Helen poprawnie wspomniano, mogę używać readOnly
rozwiązać ten konkretny przypadek z GET i PUT.
Ale powiedzmy, że dodaję właściwość breed
, która musi być dostarczona (oprócz właściwości name
) dla PUT. Następnie dodaję metodę PATCH, która może być użyta do aktualizacji breed
lub name
, podczas gdy druga pozostanie niezmieniona, a ja nie chcę ustawiać żadnej z nich jako wymaganych.
Dzięki, że rozwiązuje problem w przykładzie. Jednak z moim przykładem trochę mnie to nie obchodziło i zaktualizowałem to pytanie scenariuszem dodawania metody PATCH dla częściowych aktualizacji, które nie wymagały niczego. – NotNone
@NotNone: Zaktualizowałem odpowiedź. – Helen
Dziękuję, ale teraz wygląda na to, że zarówno nazwa, jak i rasa są wymagane również dla PATCH (po Edytor Swagger jest gwiazdka). Jest to ten sam problem, co w pierwotnym pytaniu. Uważam, że na razie nie ma na to rozwiązania. – NotNone