OpenAPI 3 - 只读 属性,但允许写入 POST/PUT
OpenAPI 3 - readOnly property, but allow write in POST/PUT
有没有办法将 属性 表示为一般只读,但允许在 POST 或 PUT(即创建或替换)操作期间写入 属性?
换句话说,在创建资源时,我希望 属性 是可写的。但是一旦资源被创建,我想保持它不可变。 属性 可以是 POSTable/PUTable,但不能 PATCHable 吗?
示例:
# OK example.
/AwesomeResource POST
{"owner": "ownerID123"}
vs
# Bad Request example.
/AwesomeResource/456 PATCH
{"owner": "ownerID789"}
POST/PUT 和 PATCH/GET 需要单独的模型。具有可写 owner
属性 的 POST/PUT 模型可以作为基本模型,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
有没有办法将 属性 表示为一般只读,但允许在 POST 或 PUT(即创建或替换)操作期间写入 属性?
换句话说,在创建资源时,我希望 属性 是可写的。但是一旦资源被创建,我想保持它不可变。 属性 可以是 POSTable/PUTable,但不能 PATCHable 吗?
示例:
# OK example.
/AwesomeResource POST
{"owner": "ownerID123"}
vs
# Bad Request example.
/AwesomeResource/456 PATCH
{"owner": "ownerID789"}
POST/PUT 和 PATCH/GET 需要单独的模型。具有可写 owner
属性 的 POST/PUT 模型可以作为基本模型,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