如何在RAML 1.0

时间:2016-02-11 16:58:18

标签: java generics raml

我有一个像这样的通用Java类型:

class Response<D> {
  List<D> data;
}

并希望创建类似于RAML 1.0的东西(我是新手)。

我的第一个方法是

types:
  Response:
    type: object
    properties:
      data: object[]

并在使用时

body:
  type: Response
    properties:
      data: MyDataType[]

从API-Workbench我总是得到一个&#34;非法覆盖从Response&#34;继承的属性数据。

另一个想法是使用repeat

types:
  Response:
    type: object
    properties:
      data: object
      repeat: true

body:
  type: Response
    properties:
      data: MyDataType
      repeat: true

现在非法覆盖已经消失,但在API-Console中,我现在得到一个&#34; Uncaught TypeError&#34;。

如何解决?或者我需要一种完全不同的方法?有什么想法吗?

3 个答案:

答案 0 :(得分:2)

据我了解,Response正在抽象不同类型的数据,但格式相似。一种方法是使用resourceTypes抽象响应中的相似性,并在types中定义具体数据。

#%RAML 1.0
title: New API
version: v1
baseUri: http://api.samplehost.com
mediaType: application/json

types:
  User:
    usage: A user in the system    
    properties:
      firstname:
        required: true
      lastname:
        required: true

  ArticleId:
    usage: An id of any article in the system
    type: number

  Article:
    usage: Pattern for any article in the system
    properties:
      id:
        type: ArticleId
        required: true
      created:
        type: date
        required: true

#######################################
# the following captures the similarity:
#######################################

resourceTypes:
  collection:
    get:
      responses:
        200:
          body:
            properties:
              data: <<typename>>[]


###############
# API:
############### 

/user:
  description: All the users
  type:
    collection:
      typename: User

/article:
  description: All the articles
  type:
    collection:
      typename: Article     

答案 1 :(得分:1)

我在解决此问题时看到以下选项:

  1. 筛选测试用例的开源存储库,希望能够记录您的要求。我发现这个项目raml-java-parser tests有很多测试用例但是第一次尝试时找不到解决方案。 这是一个包含字符串collectionSchema in double angle brackets (from raml-for-jaxrs)语法的特定测试用例资源,看起来很可疑?
  2. 使用API​​生成预期输入的序列化版本,例如你的List<MyDataType>,并修改生成的输出。例如。使用与第1点相同的raml-java-parser。
  3. 查找整个文件规范的参考,包括复杂类型。似乎thisthis可能包含有趣的信息,例如“type{}地图/字典”或外部类型可能需要包含的事实。也许this answer link有助于此代表。
  4. 您问题上的raml标记目前仅有37个用户。是否有更多通用标签,以便覆盖更广泛的受众?
  5. 20分钟前我对RAML一无所知,所以不要把它当作一个完整的答案而是快速猜测。

答案 2 :(得分:0)

你说“当使用它时”: 身体:   类型:响应     特性:       data:MyDataType []

您已经在上面定义了“响应”类型,将“data”属性设置为“object []”。 “MyDataType”来自哪里?只需删除“属性”,只需“输入:响应。然后错误就会消失。” 也许您希望您的响应类型具有“任何[]”。我不知道你要做什么。也许定义另一种继承你的Response类型的类型。