Rails 请问 Rabl 怎么表示 create 这类的 post request。

jjzxcc · 2013年02月26日 · 最后由 ashchan 回复于 2013年02月26日 · 3531 次阅读

在用 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 里一般会通过对参数签名等方式来处理。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号