如何在RAML 1.0中覆盖对象数组属性类型

问题描述 投票:10回答:3

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

另一个想法是使用repeat

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

和分别

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

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

怎么解决?或者我需要一种完全不同的方法?任何的想法?

java generics raml
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     

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个用户。是否有更多通用标签可用于定位更广泛的受众?

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


0
投票

你说“和使用它时”:body:type:响应属性:data:MyDataType []

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

© www.soinside.com 2019 - 2024. All rights reserved.