Tham khảo OpenAPI 2.0, Schema Object, hoặc Swagger 2.0, Schema Object, và định nghĩa của discriminator
lĩnh vực như:"phân biệt" trong đa hình, OpenAPI 2.0 (Swagger 2.0)
Thêm hỗ trợ cho đa hình. Dấu phân biệt là tên thuộc tính lược đồ được sử dụng để phân biệt giữa lược đồ khác kế thừa lược đồ này. Tên thuộc tính được sử dụng PHẢI được xác định tại lược đồ này và nó PHẢI nằm trong danh sách thuộc tính
required
. Khi được sử dụng, giá trị PHẢI là tên của lược đồ này hoặc bất kỳ lược đồ nào thừa hưởng nó.
nhầm lẫn của tôi/câu hỏi:
- Nó là mơ hồ đối với tôi, những gì vai trò chính xác của nó trong thừa kế hoặc đa hình. Có thể một số xin vui lòng giải thích
discriminator
với một ví dụ làm việc cho thấy những gì nó chính xác làm gì và những gì nếu chúng ta không sử dụng nó? Bất kỳ lỗi, cảnh báo hoặc bất kỳ công cụ nào phụ thuộc vào nó đối với một số hoạt động? - Có phải trường hợp swagger-editor không hỗ trợ
discriminator
và trường này được sử dụng trong một số công cụ khác không?
Những gì tôi đã cố gắng cho đến nay:
- Tôi đã cố gắng sử dụng swagger-editor và ví dụ từ các tài liệu tương tự (cũng đề cập dưới đây), để chơi xung quanh với tài sản này để xem nếu tôi có thể thấy bất kỳ hành vi đặc biệt nào của nó. Tôi đã thay đổi thuộc tính, xóa nó và mở rộng mô hình
Dog
đến một cấp sâu hơn và cố gắng giống nhau trên mô hình phụ mới, nhưng tôi không thấy bất kỳ thay đổi nào trong bản xem trước của swagger-editor. - Tôi đã thử tìm kiếm trực tuyến và các câu hỏi về lưu lượng truy cập đặc biệt, nhưng không tìm thấy bất kỳ thông tin liên quan nào.
Các mẫu mã tôi sử dụng để làm thí nghiệm:
definitions:
Pet:
type: object
discriminator: petType
properties:
name:
type: string
petType:
type: string
required:
- name
- petType
Cat:
description: A representation of a cat
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
huntingSkill:
type: string
description: The measured skill for hunting
default: lazy
enum:
- clueless
- lazy
- adventurous
- aggressive
required:
- huntingSkill
Dog:
description: A representation of a dog
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
packSize:
type: integer
format: int32
description: the size of the pack the dog is from
default: 0
minimum: 0
required:
- packSize
Khi không có công cụ hỗ trợ 'discriminator', có nghĩa là không có điểm trong việc sử dụng nó sau đó. – Musa
Nó có thể được sử dụng nếu lược đồ của bạn có thuộc tính được sử dụng để xác định loại. Trong trường hợp như vậy, 'discriminator' là hoàn toàn phù hợp và có thể giúp các nhà phát triển khác hiểu được mối quan hệ đa hình. Nếu bạn sử dụng công cụ của bên thứ ba như [ReDoc] (https://github.com/Rebilly/ReDoc) có hỗ trợ 'discriminator', nó có thể hữu ích. – Wilson
@wilson @musa. ReDoc tác giả ở đây. Những gì tôi có thể thêm vào là "discriminator' thực sự khó làm việc với quan điểm của tác giả công cụ. Thành thật mà nói, tôi không thể nhớ lại các công cụ khác so với ReDoc sử dụng bất kỳ sự phân biệt đối xử nào: ( Đây là liên kết đến gif về cách thức phân biệt đối xử được sử dụng trong ReDoc: https://github.com/Rebilly/ReDoc/raw/master/ tài liệu/hình ảnh/discriminator-demo.gif @Wilson bạn có thể đính kèm nó vào câu trả lời của bạn – RomanHotsiy