Есть ли способ исключить свойство из типа тела (RAML)?

Есть ли способ исключить одно или несколько свойств из тела запроса при использовании типа и написании API с использованием RAML 1.0

Я объясню. У меня есть тип: "Заказ" с набором свойств. У меня есть ресурс /orders и метод post который позволяет пользователям создавать новый заказ. Тело запроса является структурой заказа json, а ответ также является структурой заказа.

Но я не хочу, чтобы пользователи указывали идентификатор заказа при отправке запроса. Но этот идентификатор (и еще пара полей "только для ответа") будут возвращены при ответе. Я не хочу создавать дополнительный тип, как OrderRequest а затем наследовать его с Order типа, может есть более элегантное решение?

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

Спасибо и извините за мой английский:)

2 ответа

Решение

Используйте два типа. Второй будет ребенком первого. Пример:

#%RAML 1.0
title: GitHub API
version: v3
baseUri: https://api.github.com
mediaType:  application/json
types:
  OrderCreating:
    type: object
    properties:
      products:
        description: List of product ids with amount.
        required: true
        type: object
        properties:
          []:
            type: number
      coupon?: string
  Order:
    type: OrderCreating
    properties:
      id: integer
      price: number
...
/orders:
  post:
    body:
      application/json:
        type: OrderCreating
  /{orderId}:
    get:
      responses:
        200:
          body:
            application/json:
              type: Order

Также вы можете включить библиотеку с декларацией ваших типов.

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

Другие вопросы по тегам