2016-09-10 3 views
2

Мне было предложено использовать swagger для описания API, и я изо всех сил пытаюсь заставить более сложные ситуации работать. Представьте, что вы публикуете заказ с несколькими элементами заказаSwagger Вложенный массив объектов

<upload_order> 
<token>d6a91238b0f17b49d49fbdcbba773d71</token> 
<order> 
    <order_id>10006</order_id> 
    <item_value>48.50</item_value> 
    <postage_value>5.00</postage_value> 
    <gross_value>A43.50</gross_value> 
    <discount_value>10.00</discount_value> 
    <delivery_date>2016-10-32</delivery_date> 
    <customer_name>Tom H</customer_name> 
    <business_name>Toysorry</business_name> 
    <address_line_1>Adderss Line 1</address_line_1> 
    <address_line_2>Adderss Line 1</address_line_2> 
    <town>Town</town> 
    <county>County</county> 
    <postcode>PO123ST</postcode> 
    <email>[email protected]</email> 
    <telephone>0787878787878</telephone> 
    <delivery_instructions>Garage</delivery_instructions> 
    <delivery_method>PRE12</delivery_method> 
    <items> 
     <item> 
      <id>1</id> 
      <sku>BLABLA</sku> 
      <qty>A</qty> 
      <product_name>A Product</product_name> 
      <unit_price>1.50</unit_price> 
     </item> 
     <item> 
      <id>2</id> 
      <sku>HAHAHA</sku> 
      <qty>2</qty> 
      <product_name>WINTER BUNDLE</product_name> 
      <unit_price>22.00</unit_price> 
     </item> 
    </items> 
</order> 

как я могу описать его развязность, так как использование массива таким образом, кажется, не играет

/upload_order: 
post: 
    description: create order 
    operationId: upload_order 
    produces: 
    - application/xml 
    parameters: 
    - name: upload_order 
     in: body 
     description: upload order 
     required: true 
     schema: 
     $ref: '#/definitions/newOrder' 
    responses: 
    '200': 
     description: response 
     schema: 
     $ref: '#/definitions/token_response' 
    default: 
     description: unexpected error 
     schema: 
     $ref: '#/definitions/errorModel' 



newOrder: 
    type: object 
    required: 
     - token 
     - order_id 
     - item_value 
     - postage_value 
     - gross_value 
     - discount_value 
     - delivery_date 
     - customer_name 
     - business_name 
     - address_line_1 
     - address_line_2 
     - town 
     - county 
     - postcode 
     - email 
     - telephone 
     - delivery_instructions 
     - delivery_method 
     - items 
    properties: 
     token: 
     type: string 
     order_id: 
     type: string 
     item_value: 
     type: number 
     format: float 
     postage_value: 
     type: number 
     format: float 
     gross_value: 
     type: number 
     format: float 
     discount_value: 
     type: number 
     format: float 
     delivery_date: 
     type: string 
     format: date 
     customer_name: 
     type: string 
     business_name: 
     type: string 
     address_line_1: 
     type: string 
     address_line_2: 
     type: string 
     town: 
     type: string 
     county: 
     type: string 
     postcode: 
     type: string 
     email: 
     type: string 
     telephone: 
     type: string 
     delivery_instructions: 
     type: string 
     delivery_method: 
     type: string 
     items: 
     $ref: '#/definitions/itemsArray' 
    itemsArray: 
    type: array 
    required: item 
    item: 
     $ref: '#/definitions/item' 
    item: 
    required: 
     - id 
     - sku 
     - qty 
     - product_name 
     - unit_price 
    type: object 
    properties: 
     id: 
     type: string 
     sku: 
     type: string 
     qty: 
     type: integer 
     format: int32 
     product_name: 
     type: string 
     unit_price: 
     type: number 
     format: float 

пожалуйста, спасите меня

Благодаря

UPDATE - я вычислял несколько дней BA SED НА ПОЛНЫЙ PET SHOP MARKUP, ЗАБЫЛ, чтобы отправить ответ, ЛЕГКО для некоторой

paths: 
    /upload_order: 
    post: 
     description: create order 
     operationId: upload_order 
     parameters: 
     - name: upload_order 
      in: body 
      description: upload order 
      required: true 
      schema: 
      $ref: '#/definitions/uploadOrder' 
     responses: 
     '200': 
      description: response 
      schema: 
      $ref: '#/definitions/upload_response' 
     default: 
      description: unexpected error 
      schema: 
      $ref: '#/definitions/errorModel' 
definitions: 
    uploadOrder: 
    type: object 
    required: 
     - upload_order 
    properties: 
     upload_order: 
     $ref: '#/definitions/uploadOrderData' 
    uploadOrderData: 
    type: object 
    required: 
     - login 
     - order 
    properties: 
     login: 
     $ref: '#/definitions/login' 
     order: 
     $ref: '#/definitions/order' 
    order: 
    type: object 
    required: 
     - order_id 
     - address_line_2 
     - items 
    properties: 
     order_id: 
     type: string 
     item_value: 
     type: string 
     pattern: '^(\d{1,100}\.\d{2})$' 
     default: '0.00' 
     postage_value: 
     type: string 
     pattern: '^(\d{1,100}\.\d{2})$' 
     default: '0.00' 
     gross_value: 
     type: string 
     pattern: '^(\d{1,100}\.\d{2})$' 
     default: '0.00' 
     discount_value: 
     type: string 
     pattern: '^(\d{1,100}\.\d{2})$' 
     default: '0.00' 
     delivery_date: 
     type: string 
     format: date 
     customer_name: 
     type: string 
     business_name: 
     type: string 
     address_line_1: 
     type: string 
     address_line_2: 
     type: string 
     town: 
     type: string 
     county: 
     type: string 
     postcode: 
     type: string 
     email: 
     type: string 
     telephone: 
     type: string 
     delivery_instructions: 
     type: string 
     delivery_method: 
     type: string 
     items: 
     $ref: '#/definitions/orderItems' 
    orderItems: 
    type: array 
    required: 
     - item 
    properties: 
     item: 
     $ref: '#/definitions/orderItem' 
    items: 
     $ref: '#/definitions/orderItem' 
    orderItem: 
    required: 
     - id 
     - sku 
     - qty 
     - product_name 
     - unit_price 
    type: object 
    properties: 
     id: 
     type: string 
     sku: 
     type: string 
     qty: 
     type: integer 
     format: int32 
     product_name: 
     type: string 
     unit_price: 
     type: string 
     pattern: '^(\d{1,100}\.\d{2})$' 
     default: '0.00' 
    login: 
    type: object 
    required: 
     - login 
    properties: 
     login: 
     $ref: '#/definitions/login_data' 
    login_data: 
    type: object 
    required: 
     - username 
     - password 
     - channel_code 
    properties: 
     username: 
     type: string 
     password: 
     type: string 
     channel_code: 
     type: string 
    upload_response: 
    type: object 
    properties: 
     response: 
     $ref: '#/definitions/upload_response_data' 
    upload_response_data: 
    type: object 
    required: 
     - messages 
     - success 
    properties: 
     messages: 
     $ref: '#/definitions/messages' 
     success: 
     type: string 
    errorModel: 
    type: object 
    required: 
     - messages 
    properties: 
     messages: 
     $ref: '#/definitions/messages' 
    messages: 
    type: array 
    required: 
     - message 
    properties: 
     message: 
     $ref: '#/definitions/message' 
    items: 
     $ref: '#/definitions/message' 
    message: 
    type: string 

ответ

2

На основе документа XML, кажется, что вам не нужно будет тип itemsArray. Вы можете попытаться упростить определение newOrder путем ссылки на тип item в items напрямую. Вот соответствующие части модифицированного определения типа.

definitions: 
    newOrder: 
     type: object 
     ... 
     properties: 
     ... 
     delivery_method: 
      type: string 
     items: 
      type: array 
      items: 
      $ref: '#/definitions/item' 

    item: 
     ... 
     type: object 
     properties: 
     id: 
      type: string 
     ... 

Полученная структура данных выглядит следующим образом: http://i.stack.imgur.com/MyjpD.png

Дополнительное примечание: в token находится за пределами order элемента в документе XML, вероятно, нужно разделить ваш newOrder типа на два и двигаться token к внешний элемент. Чтобы дать вам представление, вот пример со всеми свойствами, кроме токена, перемещенного во вложенный элемент order.

newOrder: 
    properties: 
     token: 
     type: string 
     order: 
     type: array 
     items: 
      $ref: '#/definitions/order' 
    order: 
    properties: 
     order_id: 
     type: string 
     ... 

Результирующее определение типа: http://i.stack.imgur.com/P12Ah.png

+0

ах человек извините я понял, несколько дней спустя, что мой вопрос был основан на полной зоомагазине разметке, но благодаря смотрит прямо мне – tomhre

+0

на самом деле я просто пытался в чванства и, кажется, все в порядке, я сделал myine по-разному, но в любом случае спасибо – tomhre