OpenAPI 3 - свойство readOnly, но позволяет писать в POST / PUT - PullRequest
1 голос
/ 06 февраля 2020

Есть ли способ представить свойство как обычно readOnly, но разрешить запись свойства во время действия POST или PUT (т.е. создания или замены)?

Другими словами, при создании ресурса Я хотел бы, чтобы собственность была доступна для записи. Но как только ресурс создан, я бы хотел сохранить его неизменным. Может ли свойство быть POSTable / PUTable, но не PATCHable?

Пример:

# OK example.
/AwesomeResource POST
{"owner": "ownerID123"}

vs

# Bad Request example.
/AwesomeResource/456 PATCH
{"owner": "ownerID789"}

1 Ответ

1 голос
/ 07 февраля 2020

Вам понадобятся отдельные модели для POST / PUT и PATCH / GET. Модель POST / PUT со свойством записи owner может быть базовой моделью, которую модель PATCH / GET расширит, добавив ограничение readOnly.

# openapi: 3.0.0

components:
  schemas:

    # Model for POST and PUT
    NewAwesomeResource:
      type: object
      properties:
        owner:
          type: string
          example: ownerID789
        ...

    # Model for PATCH and GET
    AwesomeResource:
      allOf:
        - $ref: '#/components/schemas/NewAwesomeResource'
        - properties:
            owner:
              readOnly: true
...