Есть ли способ исключить свойство из типа тела (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
Также вы можете включить библиотеку с декларацией ваших типов.
Поскольку вы не хотите создавать дополнительный тип с наследованием, вы все равно можете пометить поле как необязательное и указать, что оно присутствует в ответе.