Динамическое заполнение примера json в RAML

Мне нравится, как RAML может динамически ссылаться на разные схемы при объявлении типа ресурса, например:

resourceTypes:
  - collection:
      get:
        responses:
          200:
            body:
              application/json:
                schema: <<schema>>
      post:
        body:
          application/json:
            schema: <<schema>>Create
        responses:
          200:
            body:
              application/json:
                schema: <<schema>>

Здесь я могу использовать это как

/users:
  type: { collection: { schema: user } }

и RAML будет давать мне user ответы схемы от GET и POST, а также использовать схему userCreate для отправки запросов POST. Прохладный! Теперь я могу повторно использовать определение моей коллекции с множеством различных схем.

Но теперь, когда я хочу иметь пример json для всего, я надеялся использовать <<schema>> var по-другому, чтобы усилить «повторное использование кода». Я надеялся, что смогу сделать

resourceTypes:
  - collection:
      get:
        responses:
          200:
            body:
              application/json:
                schema: <<schema>>
                example: examples/v1-<<schema>>.json
      post:
        body:
          application/json:
            schema: <<schema>>Create
            example: examples/v1-<<schema>>-create.json
        responses:
          200:
            body:
              application/json:
                schema: <<schema>>
                example: examples/v1-<<schema>>.json

но, к сожалению, это не работает. Я получаю сообщение об ошибке

error: File with path "/examples/v1-%3C%3Cschema%3E%3E.json" does not exist

Итак, теперь я прибег к ручному добавлению этого во все мои коллекции, и пример /users, приведенный выше, стал

/users:
  type: { collection: { schema: user } }
  get:
    responses:
      200:
        body:
          application/json:
            example: !include examples/v1-user.json
  post:
    body:
      application/json:
        example: !include examples/v1-user-create.json
    responses:
      200:
        body:
          application/json:
            example: !include examples/v1-user.json

Для меня это ОЧЕНЬ накладные расходы, просто чтобы добавить примеры. Особенно, когда я хочу повторить шаблон на многих ресурсах.

Вопрос: есть ли способ добиться этого?


person Eric Olson    schedule 10.12.2014    source источник


Ответы (2)


Нет, это запрещено в RAML 0.8 согласно спецификации. Однако это может быть разрешено в будущих версиях.

person Robin Green    schedule 18.09.2015
comment
RAML 1.0 также не позволяет этого в спецификация гласит: Аргумент тега! include должен быть статическим: а именно, он НЕ ДОЛЖЕН содержать никаких параметров типа ресурса или параметров признака. - person juliocesar; 26.09.2018

Поскольку RAML - это просто стандарт, я сначала хотел бы спросить: кто / что выдает эту ошибку? (Я имею в виду, какой инструмент вы используете?) Плюс: Вы уверены в примере (первом)? Он не использует! Include, поэтому не должен даже иметь намерения достичь этого несуществующего файла (я предполагаю, что вы используете! Includes в исходном скрипте, но пропустили это при копировании здесь).

Кроме того, и я знаю, что вы не просите об этом, но на всякий случай: - Вы можете передать 2 параметра (в качестве обходного пути), один для схемы, а другой для примера (это все еще накладные расходы, но не ЭТО жестко запрограммировано). - Вы знаете о зарезервированных параметрах? Использование этого + "сингулярность" или "множественное число" в зависимости от случая также может помочь вам в вашем предприятии по повторному использованию;) Взгляните на http://raml.org/docs-200.html#parameters

person nohorbee    schedule 15.12.2014