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, ...]
答案 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)
我认为以下示例适用于此处。它演示了定义两种类型Url
和File
(使用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