2016-12-15 3 views
0

Мы пишем нашу спецификацию RAML, и мы определяем наши типы данных в отдельных файлах. Что-то вроде:RAML include и множественное наследование

%#RAML 1.0 DataType 
type: !include ../base-type.raml 
description: Lorem ipsum 
properties: 
    foo: string 

, который работает хорошо, но в соответствии со спецификацией Raml вы можете использовать множественное наследование, используя тип массива YAML для type поля.

Но тем не менее, если я пытаюсь сделать это с помощью включает в себя, я всегда получаю ту же ошибку: INHERITING_UNKNOWN_TYPE

Я пытался это так:

type: [!include ../base-type.raml] 

type: [!include ../base-type.raml, !include ../another-type.raml] 

type: 
    - !include ../base-type.raml 
    - !include ../another-type.raml 

Но все дают ту же ошибку. Я делаю это неправильно или это не поддерживается в RAML?

ответ

0

Множественное наследование может быть определено так, как вы говорите, но я не думаю, что оно работает со встроенными типами.

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

Например:

types: 
    Person: 
    type: object 
    properties: 
     name: string 
    Employee: 
    type: object 
    properties: 
     employeeNr: integer 

После того, как вы делаете, что вы можете создать новый тип, который наследует от, например:

Teacher: 
    type: [ Person, Employee ] 

, а затем использовать этот тип в какой-то ресурс:

/someresource: 
    get: 
    responses: 
     200: 
     body: 
      application/json: 
      type: Teacher 

или непосредственно указать такие типы, как массив:

/someresource: 
    get: 
    responses: 
     200: 
     body: 
      application/json: 
      type: [ Person, Employee ] 

Это также работает с включает в себя, например .:

types: !include myTypes.raml 

, но я не использовал включает в примерах выше, чтобы быть более четким.

Подробнее here

0

На самом деле, я узнал, как включить несколько файлов с типами (хотя он не был представлен в примерах документации) - в корне Raml-файл просто добавить:

uses: 
    file: path/to/file.raml 
    otherfile: path/to/otherFile.raml 
    yetanother: path/to/yetanother.raml 
+0

Согласно спецификации, ключ 'uses' импортирует библиотеки. Это означает, что для ссылки на что-то, импортированное этим решением, вам нужно будет использовать 'file.MyType' вместо' MyType' напрямую. По крайней мере, это то, что задокументировано. – Dschee

Смежные вопросы