2016-02-11 5 views
10

У меня есть общий тип Java, как это:Как переопределить тип свойства массива объектов в Raml 1.0

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

и хочу создать что-то подобное с Raml 1.0 (где я новичок).

Мой первый подход был

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

и при его использовании

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

С API-Workbench я всегда получаю "Illegal переопределение данных свойств, унаследованных от Response".

Другая идея была бы использовать repeat:

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

и соответственно

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

Теперь нелегальный переопределение ушел, но в API-консоли теперь я получаю «неперехваченный TypeError».

Как это решить? Или мне нужен совершенно другой подход? Есть идеи?

ответ

1

Я вижу следующие варианты в решении этого вопроса:

  1. экрана репозиториев с открытым исходным кодом для testcases, которые, мы надеемся, документировать ваши требования. Я нашел этот проект raml-java-parser tests с загрузкой тестовых ящиков, но не смог найти решение с первой попытки. Вот конкретный ресурс тестовой системы, содержащий строку collectionSchema in double angle brackets (from raml-for-jaxrs) синтаксис, выглядит подозрительно?
  2. Используйте API для создания сериализованной версии ожидаемого ввода, например. ваш List<MyDataType>, и отредактируйте сгенерированный вывод. Например. используя тот же raml-java-parser из точки 1.
  3. Найти ссылку на всю спецификацию файла, включая сложные типы. Кажется, как this и this может включать в себя интересную информацию, как «карта/словарь с type{} или тот факт, что внешние виды, возможно, потребуется включение. Может быть, this answer link помогает от этого имени.
  4. RAML тег на ваш вопрос в настоящее время следуют только 37 пользователей. Существуют ли более общие теги для того, чтобы охватить более широкую аудиторию?

Я ничего не знал о RAML 20 минут назад, так что не рассматривайте это как полный ответ, но быстро догадайтесь.

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  
0

Вы сказали, что "и при его использовании": тело: Тип: Ответ свойства: данные: MyDataType []

Вы уже определили тип "ответ" выше, чтобы иметь «данные "свойство как" объект [] ". Откуда появился «MyDataType»? Просто удалите «свойства» здесь и просто введите «type: Response». Затем ошибка должна исчезнуть.
Возможно, вы хотите, чтобы ваш тип ответа имел «any []». Я не могу сказать, что вы пытаетесь сделать. другой тип, который наследует ваш тип ответа.

+0

Возможно, вы пропустили декларацию типа Java и упомянутый общий вопрос в вопросе, но 'any' удалил бы ошибку, но ничего не документировал, что не предназначено для использования инструмента документации по конечной точке. –

Смежные вопросы