Как переопределить тип свойства массива объектов в RAML 1.0
У меня есть общий тип 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-консоли теперь я получаю "Uncaught TypeError".
Как это решить? Или мне нужен совершенно другой подход? Любая идея?
Ответы
Ответ 1
Как я понимаю, 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
Ответ 2
В решении этой проблемы я вижу следующие варианты:
- Хранилища с открытым исходным кодом для тестовых ящиков, которые, надеюсь, документируют ваши требования. Я нашел этот проект тесты raml-java-parser с загрузкой тестовых ящиков, но не смог найти решение с первой попытки.
Вот конкретный ресурс тестовой системы, содержащий строку collectionSchema в двойных угловых скобках (из raml-for-jaxrs), выглядит подозрительно?
- Используйте API для создания сериализованной версии ожидаемого ввода, например. ваш
List<MyDataType>
и переработайте сгенерированный вывод. Например. используя тот же raml-java-parser из точки 1.
- Найдите ссылку для всей спецификации файла, включая сложные типы. Кажется, что this и это может включать в себя интересную информацию, например "map/dictionary with
type{}
или тот факт, что внешние типы могут нуждаться в включении. Возможно, эта ссылка ответа помогает от этого имени.
- В теге raml вашего вопроса в настоящее время следуют только 37 пользователей. Существуют ли более общие теги, чтобы привлечь более широкую аудиторию?
Я ничего не знал о RAML 20 минут назад, поэтому не рассматривайте это как полный ответ, но быстро догадайтесь.
Ответ 3
Вы сказали "и при использовании":
тело: type: Response свойства: data: MyDataType []
Вы уже определили тип "Ответ" выше, чтобы иметь свойство "data" как "object []". Откуда появился "MyDataType"? Просто удалите "свойства" здесь и просто введите "type: Response". Тогда ошибка должна исчезнуть.
Возможно, вы хотите, чтобы ваш тип ответа имел "any []". Я не могу сказать, что вы пытаетесь сделать. Может быть, определить другой тип, который наследует ваш тип ответа.