剥去铁轨

时间:2015-09-27 12:02:23

标签: ruby-on-rails ruby

我只需要使用控制器,宝石等。如果我去掉导轨,(宝石,视图等),它还能正常工作吗?实现这一目标的最佳途径是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用rails-api

  

Rails :: API是普通Rails应用程序的一个子集,为不需要完整Rails应用程序提供的所有功能的应用程序创建。它更轻巧,因此比普通的Rails应用程序快一点。其使用的主要示例仅在API应用程序中,您通常不需要整个Rails中间件堆栈或模板生成。

答案 1 :(得分:2)

您还可以查看an opinionated micro-framework for creating REST-like APIs in Ruby

  

Grape是一个类似REST的API微框架,适用于Ruby。它的目的是为了   在Rack上运行或补充现有的Web应用程序框架,例如   Rails和Sinatra通过提供简单的DSL来轻松开发RESTful   蜜蜂。它内置了对常见约定的支持,包括   多种格式,子域/前缀限制,内容协商,   版本化等等。

基本用法

  

Grape API是由子类创建的Rack应用程序   葡萄:: API。下面是一个简单的例子,展示了一些比较常见的例子   在重新创建Twitter部分的背景下Grape的功能   API。

module Twitter
  class API < Grape::API
    version 'v1', using: :header, vendor: 'twitter'
    format :json
    prefix :api

    helpers do
      def current_user
        @current_user ||= User.authorize!(env)
      end

      def authenticate!
        error!('401 Unauthorized', 401) unless current_user
      end
    end

    resource :statuses do
      desc 'Return a public timeline.'
      get :public_timeline do
        Status.limit(20)
      end

      desc 'Return a personal timeline.'
      get :home_timeline do
        authenticate!
        current_user.statuses.limit(20)
      end

      desc 'Return a status.'
      params do
        requires :id, type: Integer, desc: 'Status id.'
      end
      route_param :id do
        get do
          Status.find(params[:id])
        end
      end

      desc 'Create a status.'
      params do
        requires :status, type: String, desc: 'Your status.'
      end
      post do
        authenticate!
        Status.create!({
          user: current_user,
          text: params[:status]
        })
      end

      desc 'Update a status.'
      params do
        requires :id, type: String, desc: 'Status ID.'
        requires :status, type: String, desc: 'Your status.'
      end
      put ':id' do
        authenticate!
        current_user.statuses.find(params[:id]).update({
          user: current_user,
          text: params[:status]
        })
      end

      desc 'Delete a status.'
      params do
        requires :id, type: String, desc: 'Status ID.'
      end
      delete ':id' do
        authenticate!
        current_user.statuses.find(params[:id]).destroy
      end
    end
  end
end

另请查看ruby json implementations 感谢@oscar提供此链接

我更喜欢使用rabl

RABL示例:

  

然后我们可以创建以下RABL模板来表达API   @posts的输出:

# app/views/posts/index.rabl
collection @posts
attributes :id, :title, :subject
child(:user) { attributes :full_name }
node(:read) { |post| post.read_by?(@user) }

输出:

[{  "post" :
  {
    "id" : 5, "title": "...", "subject": "...",
    "user" : { "full_name" : "..." },
    "read" : true
  }
}]