在用 rabl gem 来开发 ruby api。 表示 show 一类的 get request 很简单,只需要建 show.json.html 文件
#show.json.html object @user attributes :id, :name, :email, :last_login
但是像 create 这种 post request 要怎么用呢? 建一个 create.json.html 文件? 还有就是这类的 api 要怎么验证呢?用 curl?谢谢。
POST request 也是要 render 的。所以是的,建一个 create.json.html 就可以了。
“验证”是什么意思?测试 api 是否正常返回(rabl 默认是用 html(context-type) 返回的,虽然内容是 json 的)? 用 curl 或直接在浏览器里访问都可以。如果有必要,也可以写 request test。
@ashchan 多谢回复。 还想问下,访问 login 这类的 curl 应该怎么写。 我用
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"user":{"name":"user", "email":"[email protected]", "password":"123456"}}' http://localhost:3000/a/users/login
得到
{}%
后台返回
Started POST "/a/users/login" for 127.0.0.1 at 2013-02-26 10:40:58 +0800 Processing by SessionsController#new as JSON Parameters: {"user"=>{"name"=>"user", "email"=>"[email protected]", "password"=>"[FILTERED]"}, "session"=>{"user"=>{"name"=>"user", "email"=>"[email protected]", "password"=>"[FILTERED]"}}} WARNING: Can't verify CSRF token authenticity User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`remember_token` IS NULL LIMIT 1 Rendered sessions/new.json.rabl (2.3ms) Completed 200 OK in 6ms (Views: 4.8ms | ActiveRecord: 0.2ms)
这是 cookie 的问题?
#2 楼 @jjzxcc curl 这样的写法是对的。默认 post 用了 CSRF 保护,你的 layout 里应该有这句:
<%= csrf_meta_tags %>
它会去检查 params 里的 csrf-token。用 rails form helper 生成的 form 里含有一个 hidden field 用来传这个值。你用 curl 去掉就缺了这个。
一般 api 里是不使用它的,只在普通 html form 里用。我也不建议你把 html 的登录 form 和 api 做成一个。api 里一般会通过对参数签名等方式来处理。