2016-12-15 91 views
0

我们一直在编写我们的RAML规范,并且我们一直在单独的文件中定义数据类型。喜欢的东西:RAML包含和多重继承

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

,工作正常,但根据肾错构瘤规格您可以通过使用该type领域的YAML数组类型使用多重继承。

但是但是,如果我尝试与包括要做到这一点,我总是得到同样的错误: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

根据规范'使用'键输入库。这意味着,要引用此解决方案导入的内容,您需要直接使用'file.MyType'而不是'MyType'。至少这就是记录。 – Dschee