2016-02-16 21 views
6

Vorrei chiedere se esiste un supporto per i parametri POST in RAML. E se c'è - qual è la sintassi. Ho sfogliato spec. 0.8 e spec. 1.0 approssimativamente (in realtà sono legato a 0.8, poiché molti strumenti non supportano ancora 1.0). Non ho trovato supporto per i parametri POST, ma forse mi sono perso qualcosa.Supporto parametri POST in RAM

Quindi cosa intendo per parametri POST? Questi possono essere sia dei due (mi dispiace, non so i loro nomi formali, se ce ne sono):

  • HTTP parametri semplici, key=value, ogni parametro in una sola riga, come

    name=John Doe amount=5 che non è davvero a portata di mano (ad esempio non nesting)

  • parametri come JSON oggetto, solo un JSON con tutta la sua sintassi consentita (lato server ha la necessità di analizzare questo JSON); come ad esempio:

    {"name":"John Doe","amount":"5"}

diverse implementazioni dell'API lato server utilizzano 1 ° o 2 ° uno. Ad ogni modo, , come supporta RAML?

+0

Quale tipo di contenuto viene utilizzato per l'opzione 1? –

+0

@DavidDossot Non importa, posso aggiustarlo più tardi. La domanda riguarda il concetto. Si può presumere che 'nome' sia di tipo' stringa' e 'quantità' di tipo' numero'. – ducin

+0

È importante perché il tipo di contenuto fa parte della specifica del corpo della richiesta nella RAML. Inoltre non ho familiarità con questa codifica e quindi speravo di saperne di più su di esso una volta conosciuto il tipo. –

risposta

6

@Pedro ha coperto l'opzione 2, ecco l'opzione 1. Sulla base della discussione in commenti, sembra che la codifica utilizzata sia application/x-www-form-urlencoded.

È necessario utilizzare formParameters.

Esempio:

post: 
    description: The POST operation adds an object to a specified bucket using HTML forms. 
    body: 
     application/x-www-form-urlencoded: 
     formParameters: 
      AWSAccessKeyId: 
      description: The AWS Access Key ID of the owner of the bucket who grants an Anonymous user access for a request that satisfies the set of constraints in the Policy. 
      type: string 
      acl: 
      description: Specifies an Amazon S3 access control list. If an invalid access control list is specified, an error is generated. 
      type: string 

Riferimento: https://github.com/raml-org/raml-spec/blob/master/raml-0.8.md#web-forms

4

parametri POST possono essere espressi utilizzando JSON Schema

Un semplice Raml 0.8 esempio:

#%RAML 0.8 
title: Api 
baseUri:/
schemas: 
    - Invoice: | 
    { 
     "$schema": "http://json-schema.org/draft-03/schema", 
     "type": "object", 
     "properties": { 
     "Id": { "type": "integer"}, 
     "Name": { "type": "string"}, 
     "Total": { "type": "number"} 
     } 
    } 
/invoices: 
    post: 
    body: 
     application/json: 
     schema: Invoice 
+0

quindi lo schema JSON può essere usato sia per la configurazione dello schema di richiesta sia per la definizione dello schema di risposta, giusto? – ducin

+0

sì, può vedere: https://github.com/raml-org/raml-spec/blob/master/raml-0.8.md#responses –

+0

grazie a entrambi, signore. Spiacente, non posso accettare entrambi, accetto @DavidDossot come sembra il più difficile. – ducin

7

Come si vede in questo riferimento https://github.com/raml-org/raml-spec/wiki/Breaking-Changes:

Per Raml 0.8:

body: 
    application/x-www-form-urlencoded: 
    formParameters: 
     name: 
     description: name on account 
     type: string 
     example: Naruto Uzumaki 
     gender: 
     enum: ["male", "female"] 

è l'equivalente in Raml 1.0 a:

body: 
    application/x-www-form-urlencoded: 
    properties: 
     name: 
     description: name on account 
     type: string 
     example: Naruto Uzumaki 
     gender: 
     enum: ["male", "female"] 

Quindi ciò che cambia è l'attributo formParameters a quello delle proprietà.

+1

Grazie per l'esempio di raml 1.0! –