2015-06-17 19 views
11

Tôi đang viết định nghĩa chữ thập trong yaml. Nói rằng tôi có một định nghĩa giống như thế này.Làm cách nào để tạo một trường theo định nghĩa bắt buộc đối với một số thao tác và không phải là một số hoạt động khác

paths: 
    /payloads: 
    post: 
     summary: create a payload 
     ... 
     parameters: 
     - in: body 
     name: payload 
     description: New payload 
     required: true 
     schema: 
      $ref: "#/definitions/payload" 
    put: 
     summary: update a payload 
     ... 
     parameters: 
     - in: body 
     name: payload 
     description: Updated existing payload 
     required: true 
     schema: 
      $ref: "#/definitions/payload" 
... 
definitions: 
    payload: 
    properties: 
     id: 
     type: string 
     someProperty: 
     type: string 
     ... 

Có cách nào tôi có thể chỉ ra rằng thuộc tính id của tải trọng là bắt buộc cho thao tác PUT và không bắt buộc (hoặc hoàn toàn không xuất hiện) cho hoạt động POST?

Trả lời

14

Bạn sẽ phải xác định riêng các mô hình.

Tuy nhiên, bạn có các tùy chọn cho các trường hợp loại trừ và sự khác biệt.

Nếu bạn muốn loại trừ, đây là trường hợp dễ dàng, hãy tạo mô hình với thuộc tính bị loại trừ, hãy nói ModelA. Sau đó, xác định ModelB như ModelA cộng với additional property:

ModelB: 
    allOf: 
    - $ref: "#/definitions/ModelA" 
    - type: object 
     properties: 
     id: 
      type: string 

Nếu bạn đang tìm kiếm để xác định sự khác biệt, hãy làm theo phương pháp tương tự trên, và loại trừ id từ ModelA. Sau đó, hãy xác định ModelBModelC như mở rộng ModelA và thêm thuộc tính id vào chúng, mỗi thuộc tính có các hạn chế riêng. Theo bạn, JSON Schema có thể cho phép bạn làm theo ví dụ ban đầu ở trên cho một số trường hợp để "ghi đè" một định nghĩa. Tuy nhiên, vì nó không thực sự quan trọng, và người ta cần phải hiểu các khái niệm của Lược đồ JSON tốt hơn để không phạm sai lầm đơn giản, tôi khuyên bạn nên đi con đường này ngay bây giờ.

+0

Điều đó rất hữu ích. Tôi sẽ quan tâm đến bất kỳ thông tin chi tiết nào khác về "ghi đè" này, vì tôi thực sự muốn tránh nhiều mô hình nếu có thể. Tài liệu lược đồ xuất hiện để cho biết rằng ghi đè định nghĩa có thể được đặt trong phần "lược đồ" của phương thức, với điều kiện phần tử không được "sao chép" ... Có ví dụ nào về cú pháp này không? – rainecc

+0

Câu trả lời của bạn nhận được tiền thưởng vì không có lựa chọn nào khác. Nhưng tôi vẫn hy vọng có những lựa chọn thay thế. Nếu có ai biết, hãy viết câu trả lời. –

+0

Tin tôi đi, tôi ước có. Thật không may, JSON Schema là một ngôn ngữ xác nhận và không phải là một ngôn ngữ lập trình, vì vậy nó không thực sự thân thiện với các trường hợp sử dụng (phổ biến) như vậy. – Ron

Các vấn đề liên quan