Использование свойств шаблона с additionalProperties: false

У меня есть требование указать API в raml, где должны быть указаны свойства объекта, иначе проверка должна завершиться неудачей. Это достигается additionalProperties: false.

Кроме того, я хотел бы указать, что объекты запроса могут содержать свойства шаблона, аналогичные официальному примеру:

/^note\d+$/?: # restrict any properties whose keys start with "note"
              # followed by a string of one or more digits
        type: string

Эти две вещи хороши сами по себе, но когда они собраны вместе, они больше не работают (как указано в спецификации RAML):

Moreover, if additionalProperties is false (explicitly or by inheritance) in a given type definition, then explicitly setting pattern properties in that definition is not allowed. If additionalProperties is true (or omitted) in a given type definition, then pattern properties are allowed and further restrict the additional properties allowed in that type.

Итак, вопрос в том, как мне выполнить это требование. что-то вроде:

types:
  Person:
    description: |-
      Document representing a person.
    additionalProperties: false
    properties:
      firstName?:
        description: |-
          The person's first name
        type: string
      /^person_info_.+$/?:
        description: Additional person info.
        type: string

Обратите внимание, что в этом примере не будет сказано что-то вроде

extraneous key [person_info_1] is not permitted

person pst    schedule 09.10.2019    source источник
comment
Где вы видите ошибку "посторонний ключ ..."? Может оказаться полезным более подробный контекст сообщения об ошибке.   -  person aled    schedule 10.10.2019
comment
спасибо за ответ, использую рамл в приложении mulesoft. Ошибка возникает, если задано additionalProperties: false и передано свойство шаблона /^person_info_.+$/ ?:. В моем случае свойство в запросе - person_info_1   -  person pst    schedule 10.10.2019
comment
Добавьте несколько строк из журнала вокруг ошибки, если она там напечатана. Также используются версии Mule Runtime, APIKit, Studio.   -  person aled    schedule 10.10.2019
comment
Запись в журнале: Сообщение: посторонний ключ [person_info_1] не разрешен Расположение: Позиция: Строка 0, Столбец 0 Тип ошибки: APIKIT: BAD_REQUEST Элемент: xxx-xxx-api-v1-main / processors / 0 @ xxxapp: xxx-api- v1.xml: 59 Элемент XML: ‹apikit: router config-ref = xxx-api-v1-config› ‹/ apikit: router› Anypoint Studio: 7.3.5 Apikit: ‹artifactId› mule-apikit-module ‹/artifactId› ‹Version› 1.3.6 ‹/version› Время выполнения мула: ‹app.runtime› 4.2.1 ‹/app.runtime› Ожидали ли вы, что сочетание дополнительных свойств: false и свойств шаблона сработает?   -  person pst    schedule 11.10.2019
comment
Нет, я просто спросил, потому что информация в вопросе была неполной. Обратите внимание, что в руководстве к вопросу рекомендуется указывать подробности.   -  person aled    schedule 11.10.2019


Ответы (1)


Как я читал спецификацию RAML, там говорится, что существует 3 уровня строгости при проверке свойств:

  1. additionalProperties = false: разрешены только те свойства, которые объявлены типом.
  2. additionalProperties = true И свойства шаблона указаны: любое дополнительное имя свойства допустимо, но ЕСЛИ имя соответствует шаблону для свойства шаблона, ТО значение должно соответствовать спецификации значения для этого свойства шаблона.
  3. additionalProperties = true И свойства шаблона не указаны: допустимо любое дополнительное свойство.

Я рад, что меня поправили по поводу значения 2, но, похоже, так читается спецификация.

person kimbert    schedule 23.10.2019
comment
Спасибо за ваш ответ. Итак, вы бы сказали, что пункт 1 заявляет, что никаких свойств шаблона не должно существовать, потому что они не указаны явно и полностью? - person pst; 24.10.2019
comment
Точно. Я думаю, вам нужно additionalProperties = true, чтобы использовать свойства шаблона. - person kimbert; 25.10.2019
comment
хм, я думаю, что мой вариант использования, чтобы не пройти проверку всех необъявленных свойств и объявить свойство шаблона, невозможно для текущей спецификации raml. - person pst; 28.10.2019