Сделайте некоторые параметры запроса зависимыми в RAML

Я пишу спецификации API с RAML. У меня есть GET API с тремя параметрами запроса. Один из них не является обязательным. В случае двух других, один из них должен присутствовать как минимум. Как мне определить это в спецификации API

/api
description: api end point

queryParameters:
  field1:
    description: field1
    required: false
    type: string
  field2:
    description: field2
    required: false
    type: string
  field3:
    description: field3
    required: false
    type: string

Здесь field1 совершенно необязательно. Это нормально, если у нас его нет. Но из двух других, либо field2, либо field3 должны присутствовать.

Так что вызов API должен быть

/api?field2=value or /api?field3=value

Как мне сделать это в raml?

2 ответа

Вы можете разделить параметры запроса на два типа (по одному для каждой комбинации) и использовать тип объединения:

types:
  oneParam:
    properties:
      field1:
        description: field1
        required: false
        type: string
      field3:
        description: field3
        type: string
  otherParam:
    properties:
      field1:
        description: field1
        required: false
        type: string
      field2:
        description: field2
        type: string

/api:
  description: api end point

  get:
    queryParameters:
      type: oneParam | otherParam

Если вы хотите принудительно вернуть неверный запрос в случае, если параметр не передан, вы можете попробовать использоватьminProperties:

      {types:
  oneParam:
    **minProperties: 1**
    properties:
      field1:
        description: field1
        required: false
        type: string
      field3:
        description: field3
        type: string
  otherParam:
    **minProperties: 1**
    properties:
      field1:
        description: field1
        required: false
        type: string
      field2:
        description: field2
        type: string

/api:
  description: api end point

  get:
    queryParameters:
      type: oneParam | otherParam
}
Другие вопросы по тегам