2014-06-06 29 views
6

Tôi đã tạo một API đơn giản với Sinatra gửi một email dựa trên dữ liệu JSON đã gửi. Tôi có thể tạo một biểu mẫu, gửi dữ liệu JSON qua biểu mẫu và truy cập các thông số để lấy chủ đề, chủ đề và nội dung của email. Tuy nhiên, tôi đang cố gắng sử dụng cURL để kiểm tra API và dường như không thể làm việc. Tôi cho rằng định dạng của tôi trong yêu cầu cURL bị vỡ. Dưới đây là một yêu cầu cURL mà tôi đã thử cũng như đầu ra của các tham số cũng như một nỗ lực phân tích các tham số bằng đá quý JSON.Gửi JSON qua cURL yêu cầu POST tới Sinatra

Tôi có xu hướng lấy thông số với khóa khổng lồ là một chuỗi dữ liệu JSON của tôi có giá trị bằng 0. Tôi đã thử thêm Content-Type: application/json, và khi tôi làm điều này, các tham số rỗng.

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 

Đây là băm params được trả về ...

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

tôi cố gắng chuyển đổi này để một cái gì đó hữu ích hơn với JSON params, và sau đó tôi nhận được sau ...

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

Tôi đã dành một ngày vững chắc về vấn đề này, đã đọc 20 bài đăng trên stackoverflow về các vấn đề tương tự và vẫn còn bối rối, vì vậy mọi lời khuyên đều hữu ích. Chúc mừng!

+0

Lệnh curl có vẻ ok ngay từ cái nhìn đầu tiên. Tuy nhiên, nếu không thấy mã Sinatra, chúng tôi không thể giúp bạn. Hãy đặt cùng một ví dụ tối thiểu thể hiện vấn đề. –

+0

Tôi hiểu rồi ... không cần phải đánh lừa với thông số. Tôi có thể tải trọng tải JSON dưới dạng băm bằng cách thực hiện các thao tác sau ... payload = JSON.parse (request.body.read) –

+0

Vui lòng thêm câu trả lời bên dưới và đánh dấu là đã chấp nhận. Cảm ơn! –

Trả lời

10

Tôi hiểu rồi ... không cần phải đánh lừa với thông số. Tôi có thể tải trọng tải JSON dưới dạng băm bằng cách thực hiện các thao tác sau ...

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

Rack contrib module Rack :: PostBodyContentTypeParser cũng sẽ làm điều này cho bạn. Băm tham số Rack được điền bằng cách deserializing dữ liệu JSON được cung cấp trong phần thân yêu cầu khi Content-Type là application/json. Xem https://github.com/rack/rack-contrib – nateware

Các vấn đề liên quan