RAML:嵌套模式

时间:2014-11-21 06:39:23

标签: raml

1)在编写RAML时,我可以在模式定义中使用嵌套吗?

例如:

schemas:
  - DNSResponse: |
      {
        "type": "object",
        "properties": {
            "AnswerSection": {
                "type": "array",
                "items": (((I want a re-useable schema here. ex: ARecord)))
            },
            "AA": {"type": "boolean"},
            "AD": {"type": "boolean"},
            ...
        }
      }
  - ARecord: |
      {
        "type": "object",
        "properties": {
            "address": "string",
            "ttl": "number",
            "name": "string"
        }
      }

2)我可以在一组可嵌套的模式中使用选项/枚举吗?

"items": [ARecord, MXRecord, PTRRecord, ...]

3 个答案:

答案 0 :(得分:6)

1)是的,你可以。见this example。那将是:

"items": { "$ref": "ARecord" }

2)我相信这可以在JSON Schema的草案4中使用oneOf指令。我不认为这是RAML支持的。或者,您可以创建基础架构并让ARecord,MXRecord和PTRRecord扩展此基础架构,然后允许基础架构的项目。这在语义上不会很丰富,但可以让你开始。

答案 1 :(得分:2)

由于你的问题不是100%要求JSON,我会在答案中加上这个......

随着RAML 1.0规范的发布,您可以使用types,这可以让您做到这一点(我认为稍微清洁一点)。

以下是参考链接:http://docs.raml.org/specs/1.0/#raml-10-spec-types

  

RAML 1.0引入了数据类型的概念,它提供了一种简洁而强大的方式来描述API中的数据。数据可以在URI参数(基本或资源URI),查询参数,请求或响应头,或者当然是请求或响应主体中。内置了一些类型,而自定义类型可以通过扩展(继承)内置类型来定义。在API期望数据的任何地方,可以使用内置类型来描述数据,或者可以内联扩展类型以描述该数据。 CustomSecurityScheme类型也可以命名,然后像任何内置类型一样使用。

对于那些想要更少文本和更多示例的人(取自RAML文档):

#%RAML 1.0 
title: API with Types
types:
  User:
    type: object
    properties:
      firstname: string
      lastname:  string
      age:       number
/users/{id}:
  get:
    responses:
      200:
        body:
          application/json:
            type: User

答案 2 :(得分:2)

我认为以下示例适用于此处。它演示了定义两种类型UrlFile(使用RAML 1.0),然后使用逻辑OR允许Item中的任一类型(也称为模式)作为子模式。如果需要,您可以包含更多类型。

我还定义了一些内联示例,演示了如果使用raml-parser它是如何工作的。

#%RAML 1.0
types:
    Url:
        properties:
            url:
                type: string
                example: http://www.cats.com/kittens.jpg
                description: |
                    The url to ingest.

    File:
        properties:
            filename:
                type: string
                example: kittens.jpg
                description: |
                    Name of the file that will be uploaded.


    Item:
        description: |
            An example of a allowing multiple types using RAML 1.0
        properties:
            ext:
                type: File | Url
        examples:
            file_example:
                content:
                    ext:
                        filename: video.mp4
            url_example:
                content:
                    ext:
                        url: http://heres.a.url.com/asset.jpg
            should_fail:
                content:
                    ext:
                        unexpected: blah