RAML中示例json的动态填充

时间:2014-12-10 17:13:57

标签: raml

我很喜欢RAML在声明resourceType时动态引用不同的模式,如:

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将从GET和POST给我user架构响应,并使用userCreate架构发送POST请求。凉!现在我可以使用大量不同的模式重用我的集合定义。

但是现在我想要为所有内容提供示例json,我希望以另一种方式利用<<schema>> var来利用&#34;代码重用&#34;。我希望能够做到

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

对我而言,添加示例只需要很多开销。特别是当我想在许多资源上重复模式时。

问题:有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:2)

不,根据规范,RAML 0.8不允许这样做。但是在未来的版本中可能会允许这样做。

答案 1 :(得分:0)

由于RAML只是一个标准,我首先会问:谁/什么引发了这个错误? (我的意思是,你用的是什么工具?) 另外:你确定这个例子(第一个)吗?它不是在使用!include,所以,甚至不应该打算到达那个不存在的文件(我假设你正在使用!包含在原始脚本中但在此处复制时省略了。)

另外,我知道你不是要求这个,但以防万一: - 您可以传递2个参数(作为变通方法),一个用于模式,另一个用于示例(它仍然是开销但不是硬编码)。 - 你知道保留的参数吗?根据具体情况使用+“singularize”或“复数”,也可以帮助您重用企业;)看看http://raml.org/docs-200.html#parameters