2016-04-26 37 views
8

Swagger 2.0 kullanıyorum ve birden çok ileti parametresi göndermek için bir sorunum var. Ben bir Operation cannot have a body parameter and a formData parameter swagger hatası var ve nasıl tamir edeceğimi bilmiyorum. Benim tanımımda bir vücut parametresine sahibim ve bu parametrenin bir JSON formatına ihtiyacı var, ancak bir taraf benim upload ve dosya isminde dosya gibi başka bir parametreye sahip.Swagger gövdesini ve formData parametresini gönder

Hem vücut hem de formData parametrelerini göndermek için nasıl yapabilirim? Sorun türü "dosya" ile biçim parametresi olarak "verileri" ayarlamaktır gidermek için

/updateDatas: 
    post: 
     summary: Upadate datas 
     description: | 
     Update datas 
     consumes: 
     - multipart/form-data 
     produces: 
      - application/json 
     parameters: 
     - name: firstFileName 
      in: formData 
      description: First file name. 
      required: true 
      type: string 
     - name: secondFileName 
      in: formData 
      description: Second file name. 
      required: true 
      type: string 
     - name: datas 
      in: body 
      description: Json object informations. 
      required: true 
      schema: 
      $ref: '#/definitions/Datas' 
     - name: firstFile 
      in: formData 
      description: First file .jpg 
      required: true 
      type: file 
     - name: clientFile 
      in: formData 
      description: Second file .jpg 
      required: true 
      type: file 
     tags: 
     - Application 
     responses: 
     '200': 
      description: Uploaded 
      schema: 
      $ref: '#/definitions/Upload' 
     '401': 
      description: Unauthorized Bad Token 
+0

Olası bir kopyası [Şemasında, şema parametresiyle birlikte bir dosya tüketen bir API nasıl tanımlanır?] (Https://stackoverflow.com/questions/32725052/in-swagger-how-to-define-an -api-bu-tüketir-a-dosya-birlikte-a-şema-parame) – Helen

+0

Benim sorum bu yazıdan daha eski ... – John

+0

Bu aslında daha büyük (2015). – Helen

cevap

5

Tek yönlü: Burada

web hizmeti tanımıdır. İşte bir örnek:

parameters: 
    - name: petId 
     in: path 
     description: ID of pet to update 
     required: true 
     type: integer 
     format: int64 
    - name: additionalMetadata 
     in: formData 
     description: Additional data to pass to server 
     required: false 
     type: string 
    - name: file 
     in: formData 
     description: file to upload 
     required: false 
     type: file 

Ref: https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen/src/test/resources/2_0/petstore.yaml#L257

GÜNCELLEME: vücut parametreleri ve form parametreleri-co var olamaz: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#parameterObject

Vücut - HTTP isteğine eklenmesini oluyor yükü. Sadece bir yük yükü olabileceğinden, sadece bir vücut parametresi olabilir. Gövde parametresinin adı parametrenin kendisi üzerinde bir etkisi yoktur ve sadece belgeleme amaçlı kullanılır. Form parametreleri de yük içinde olduğundan, aynı işlem için vücut ve form parametreleri birlikte bulunamaz.

+1

'Dosya' türü için başka bir yolu yok mu? Çünkü JSON verisini – John

+0

geçmiş bir dosya kullanmak istemiyorum, teşekkürler, ama ne ekMetadata bir tanım referansı ise? – hmartos

+0

HTTP isteğinin gövde/yük yükünün neye benzediğine dair bir örnek verebilir misiniz (ör. Https://gist.github.com kullanarak)? –

5

havalı için özelliklere see, type:body ve type:formData göre aynı işlem için birlikte var olamaz.

+1

Open API 3.0.0 hakkında ne dersiniz? https://swagger.io/docs/specification/describing-request-body/ Formdata ile JSON artık mümkün mü? – Gobliins