这是我的超资源客户端:
require 'rubygems'
require 'hyperresource'
require 'json'
api = HyperResource.new(root: 'http://127.0.0.1:9393/todos',
headers: {'Accept' => 'application/vnd.127.0.0.1:9393/todos.v1+hal+json'})
string = '{"todo":{"title":"test"}}'
hash = JSON.parse(string)
api.post(hash)
puts hash
哈希输出为:{“todo”=> {“title”=>“test”}}
在我的带有Roar API的Sinatra中,我有这个帖子功能:
post "/todos" do
params.to_json
puts params
@todo = Todo.new(params[:todo])
if @todo.save
@todo.extend(TodoRepresenter)
@todo.to_json
else
puts 'FAIL'
end
end
我的把'params'放在这里得到:{“{\”todo \“:{\”title \“:\”test \“}}”=> nil}
我发现,这些是“逃脱的字符串”,但我不知道它出了什么问题。
编辑:
我用curl和postman google扩展程序检查了我的api,两者都运行正常。它只是超资源我想
答案 0 :(得分:0)
您正在发布JSON,因此您需要注册一个Sinatra中间件,它将自动解析传入的JSON请求,或者您需要自己完成。
require 'rubygems'
require 'hyperresource'
require 'json'
api = HyperResource.new(root: 'http://127.0.0.1:9393/todos',
headers: {'Accept' => 'application/vnd.127.0.0.1:9393/todos.v1+hal+json'})
string = '{"todo":{"title":"test"}}'
hash = JSON.parse(string)
api.post({:data => hash})
puts hash
---
post "/todos" do
p = JSON.parse(params[:data])
puts p.inspect
@todo = Todo.new(p[:todo])
if @todo.save
@todo.extend(TodoRepresenter)
@todo.to_json
else
puts 'FAIL'
end
end
应该做你需要的。