2014-06-06 16 views
6

Ho creato una semplice API con Sinatra che invia un'email basata sui dati JSON inviati. Posso creare un modulo, inviare i dati JSON tramite il modulo e accedere ai parametri per ottenere l'oggetto, il soggetto e il corpo dell'e-mail. Tuttavia, sto cercando di usare cURL per testare l'API e non riesco a far funzionare le cose. Presumo che la mia formattazione nella richiesta cURL sia stata eliminata. Di seguito è riportata una richiesta CURL che ho provato oltre all'output di params e un tentativo di analizzare i parametri con la gemma JSON.Invio di JSON tramite la richiesta CURL POST a Sinatra

Tendo ad ottenere parametri con una chiave gigante che è una stringa dei miei dati JSON con un valore pari a zero. Ho provato ad aggiungere Content-Type: application/json, e quando lo faccio, params è vuoto.

curl -X POST -H "Accept: application/json" -d '{ "to": "Brantley <[email protected]>", "subject": "hello world", "body": "Hi Jennifer! Sending you an email via this API I just made." }' http://localhost:9393/send-email 

Ecco l'hash params che viene restituito ...

{"{ \"to\": \"Brantley <[email protected]>\", \"subject\": \"hello world\", \"body\": \"Hi Jennifer! Sending you an email via this API I just made.\" }"=>nil} 

provo conversione di questo in qualcosa di più utile con JSON params, e quindi ottengo il seguente ...

{\"{ \\\"to\\\": \\\"Brantley <[email protected]>\\\", \\\"subject\\\": \\\"hello world\\\", \\\"body\\\": \\\"Hi Jennifer! Sending you an email via this API I just made.\\\" }\":null}" 

Ho trascorso una giornata solida su questo, ho letto 20 post di stackoverflow su problemi simili e sono ancora perplesso, quindi qualsiasi consiglio sarebbe utile. Saluti!

+0

Il comando di arricciatura sembra ok a prima vista. Senza vedere il codice di Sinatra, tuttavia, non possiamo aiutarti. Si prega di mettere insieme un esempio minimo che mostra il problema. –

+0

Ho capito ... non c'è bisogno di scherzare con i param. È possibile ottenere il payload JSON come hash eseguendo quanto segue ... payload = JSON.parse (request.body.read) –

+0

Si prega di aggiungere la risposta qui sotto e contrassegnare come accettato. Grazie! –

risposta

10

Ho capito ... non c'è bisogno di scherzare con i param. Posso ottenere il payload JSON come un hash facendo il seguente ...

payload = JSON.parse(request.body.read) 
+0

Il modulo contribuito Rack Rack :: PostBodyContentTypeParser lo farà anche per voi. L'hash del parametro Rack viene popolato deserializzando i dati JSON forniti nel corpo della richiesta quando Content-Type è application/json. Vedi https://github.com/rack/rack-contrib – nateware