8

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

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

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

对我来说,这只是添加示例的大量开销。尤其是当我想在许多资源上重复该模式时。

问题:有没有办法做到这一点?

4

2 回答 2

2

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

于 2015-09-18T14:34:30.197 回答
0

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

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

于 2014-12-15T15:16:22.140 回答