2016-02-11 4 views
10

Ho un tipo Java generico come questo:Come ignorare un tipo di proprietà oggetto array in Raml 1.0

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

e vogliono creare qualcosa di simile con Raml 1.0 (dove io sono nuovo di).

Il mio primo approccio è stato

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

e quando lo si utilizza

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

Da API-Workbench ottengo sempre un "override illegale di dati di proprietà ereditate dalla risposta".

L'altra idea sarebbe quella di utilizzare repeat:

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

e rispettivamente

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

Ora l'override illegale è andato, ma nel API-Console io ora ottenere un "TypeError Uncaught".

Come risolvere quello? O ho bisogno di un approccio completamente diverso? Qualche idea?

risposta

1

vedo le seguenti opzioni nella soluzione di questo problema: i repository open source

  1. schermo per casi di test, che si spera documentano le vostre esigenze. Ho trovato questo progetto raml-java-parser tests con un carico di test ma non ho trovato la soluzione al primo tentativo. Ecco una risorsa testcase specifica contenente la sintassi della stringa collectionSchema in double angle brackets (from raml-for-jaxrs), sembra sospetto?
  2. Utilizzare un'API per produrre una versione serializzata dell'input previsto, ad es. il tuo List<MyDataType> e rivedi l'output generato. Per esempio. utilizzando lo stesso raml-java-parser dal punto 1.
  3. Trova un riferimento per l'intera specifica del file, inclusi i tipi complessi. Sembra come this e this potrebbero includere le informazioni interessanti, come "mappa/dizionario con type{} o il fatto che i tipi di esterni potrebbero aver bisogno di un'inclusione. Forse this answer link aiuta su questo conto.
  4. Il tag Raml sulla questione è attualmente seguito da solo 37 utenti Ci sono più tag generali possibili, per raggiungere un pubblico più ampio?

Non sapevo nulla di RAML 20 minuti fa, quindi non considerare questo come una risposta completa ma una rapida ipotesi.

2

Come ho capito, Response sta astrarre diversi tipi di dati, ma ha un formato simile Un approccio è quello di astrarre la somiglianza nella risposta utilizzando resourceTypes e definire i dati concreti in 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

Lei ha detto "e quando lo si utilizza": corpo: Tipo: Risposta proprietà: dati: MyDataType []

È già stato definito il tipo di "risposta" di cui sopra per avere un "Dati "proprietà come" oggetto [] ". Da dove proviene "MyDataType"? Basta rimuovere "Proprietà" qui e basta "digitare: Risposta. Quindi l'errore dovrebbe andare via.
Forse si desidera che il proprio tipo di risposta abbia" qualsiasi [] ". Non posso dire cosa si sta tentando di fare. un altro tipo che eredita il tuo tipo di risposta

+0

Forse ti sei perso la dichiarazione del tipo Java e il citato generico nella domanda, ma "any" rimuoverà l'errore ma non documenterà nulla, che non è l'intenzione di utilizzare uno strumento di documentazione dell'endpoint. –

Problemi correlati