10

我有一个像这样的通用 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 我总是得到“从响应继承的属性数据的非法覆盖”。

另一个想法是使用repeat

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

和分别

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

现在非法覆盖消失了,但在 API 控制台中,我现在得到一个“未捕获的类型错误”。

如何解决?还是我需要一种完全不同的方法?任何想法?

4

3 回答 3

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     
于 2016-02-17T12:48:33.460 回答
1

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

  1. 筛选测试用例的开源存储库,希望能记录您的需求。我发现这个项目raml-java-parser使用大量测试用例进行测试,但在第一次尝试时找不到解决方案。这是一个特定的测试用例资源,其中包含双尖括号(来自 raml-for-jaxrs)语法中的字符串 collectionSchema,看起来很可疑?
  2. 使用 API 生成预期输入的序列化版本,例如您的List<MyDataType>,并修改生成的输出。例如,使用与第 1 点相同的 raml-java-parser。
  3. 查找整个文件规范的参考,包括复杂类型。似乎可能包括有趣的信息,例如“地图/字典”或type{}外部类型可能需要包含的事实。也许这个答案链接对此有所帮助。
  4. 您问题上的 raml 标签目前只有 37 个用户。是否有更通用的标签,以便针对更广泛的受众?

20 分钟前我对 RAML 一无所知,所以不要把它当作一个完整的答案,而是一个快速的猜测。

于 2016-02-16T22:00:10.030 回答
0

您说“使用时”:body:type:Response properties:data:MyDataType []

您已经将上面的“响应”类型定义为具有“数据”属性作为“对象 []”。“MyDataType”从何而来?只需在此处删除“属性”并只有“类型:响应”。然后错误应该消失。
也许您希望您的响应类型具有“任何 []”。我不知道您要做什么。也许定义另一种类型它继承了您的响应类型。

于 2017-12-18T21:50:26.133 回答