我在Sinatra中使用Roar(hal / JSON)构建了一个应用程序,现在我尝试将一个新项目从我的客户端发布到此API。
在我的Sinatra应用程序中,我有这样的路线:
get '/todos/new' do
@pagetitle = 'New Todo'
@todo = Todo.new
@todo.extend(TodoRepresenter)
@todo.to_json
erb :'todos/new'
end
post "/todos" do
@todo = Todo.new(params[:todo])
if @todo.save
redirect "todos/#{@todo.id}"
else
erb :"todos/new"
end
end
我的client.rb看起来像这样:
require 'hyperresource'
class ApiRequest < HyperResource
api = ApiRequest.new(root: 'http://127.0.0.1:9393',
headers: {'Accept' => 'application/vnd.http://127.0.0.1:9393.v1+json'})
api.post '/todos/new', { :title => "a"}
这不起作用。获得工作客户端的唯一方法是get
函数:
require 'hyperresource'
class ApiRequest < HyperResource
api = ApiRequest.new(root: 'http://127.0.0.1:9393/todos/13',
headers: {'Accept' => 'application/vnd.http://127.0.0.1:9393.v1+json'})
todo = api.get
output = todo.body
puts output
我不知道如何解决这个问题,Github页面也没有告诉我。
我稍微更改了API:
get '/todos' do
@pagetitle = 'New Todo'
@todo = Todo.new
erb :'todos/new'
end
post "/todos/new" do
@todo = Todo.new(params[:todo])
@todo.extend(TodoRepresenter)
@todo.to_json
if @todo.save
redirect "todos/#{@todo.id}"
else
erb :"todos/new"
end
end
以及在我的客户中发布的方式:
todo = api.get.new_todo.post(title: "Test")
在我的API控制台中,我现在得到:
D, [2014-11-04T17:11:41.875218 #11111] DEBUG -- : Todo Load (0.1ms) SELECT "todos".* FROM "todos" WHERE "todos"."id" = ? LIMIT 1 [["id", 0]]
ActiveRecord::RecordNotFound - Couldn't find Todo with 'id'=new:
以及很多其他代码。
在我的客户端控制台中,我收到了很多代码,包含超级资源服务器错误和许多其他代码。