2013-10-09 3 views
12

ho cercato di inviare i dati a un endpoint ma detto la dimensione dei dati era troppo grande, così ho cambiato il metodo POST e ricevuto l'errore:Questa API non supporta parsing forma codificata ingresso

This API does not support parsing form-encoded input. 

Poi ho cambiato il tipo di applicazione/jSON, ancora con il post e ora sto ottenendo:

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
"reason": "parseError", 
    "message": "Parse Error" 
} 
], 
    "code": 400, 
"message": "Parse Error" 
} 
} 

Qual è il modo migliore per inviare una grande quantità di dati, vale a dire 2730 byte per un endpoint e lo hanno gestirlo propriamente? Nel mio caso il campo in questione è di tipo Testo poiché ho superato il limite di 500 caratteri per il motore di app da tenere in una stringa.

Inoltre, come con molte cose, questo funziona perfettamente sul mio computer locale, dà solo questo errore sull'istanza del motore dell'app live.

Grazie!

+0

Una stringa può essere quasi l'1 MB massima consentita in un'entità datastore (bisogno di lasciare spazio per la chiave e nient'altro) . Se non si mantiene l'input, è possibile accettare 32 MB di stringa in una richiesta. – bossylobster

+0

@bossylobster Quello che noto è che se si ha un tipo di entità nell'endpoint ci vorrà un oggetto JSON su un post, ma se si ha solo qualcosa come una stringa o una lunga, ecc. Una proprietà denominata, allora si deve aggiungere all'URL. Penso che sarebbe meglio standardizzare su JSON o darci più controllo quando definiamo gli endpoint dell'API per costringerlo a usare/prendere JSON. – Shaun

+0

Una proprietà denominata per definizione finisce come parametro del percorso. Tuttavia, le collisioni dei nomi dei parametri sono consentite, quindi puoi anche definirle nel corpo. – bossylobster

risposta

21

Non sono sicuro se il problema è correlato, ma ho ricevuto il messaggio "Questa API non supporta l'input codificato in modulo". errore quando stavo cercando di usare curl per inviare un messaggio post come questo:

curl -X POST -d '{"name": "Foo"}' http://foo.appspot.com/_ah/api/foo/1/endpoint 

Il problema era che non ero l'impostazione del tipo di contenuto. arricciare i POST con Content-Type: application/x-www-form-urlencoded se non è specificato nella riga di comando. Gli endpoint cloud di Google non accettano questo tipo di contenuto.

Quando ho cambiato l'invocazione curl per includere il tipo di contenuto, ha funzionato:

curl -X POST -d '{"name": "Foo"}' --header "Content-Type: application/json" http://foo.appspot.com/_ah/api/foo/1/endpoint