标签: grape-api

无法在Rails中安装多个Grape API

我有两个API,我试图在我的Rails应用程序中安装 - 一个名为'v1',另一个名为'twilio'.每个API都将由多个文件组成,因此我希望每个文件都有自己的文件夹.在我的app/api目录中,我有2个文件夹 - 'v1'和'twilio' - 以及一个名为'api.rb'的文件,我试图用它来安装两个api.它的内容是:

module API
  class V1 < Grape::API
    prefix "api"
    format :json
    mount API::Root => '/v1'
  end

  class Twilio < Grape::API
    prefix "twilio"
    format :xml
    mount API::Twilio_API => '/twilio'
  end
end
Run Code Online (Sandbox Code Playgroud)

在'v1'目录中,我有一个名为'root.rb'的文件,其开头如下:

module API
  class Root < Grape::API
    version 'v1', :using => :header
    ...
Run Code Online (Sandbox Code Playgroud)

在'twilio'目录中,我有一个名为'twilio_api.rb'的文件,其开头为:

module API
  class Twilio_API < Grape::API
    version 'v1', :using => :header
    ...
Run Code Online (Sandbox Code Playgroud)

我的路线文件有:

mount API::V1 => "/"
mount API::Twilio => "/"
Run Code Online (Sandbox Code Playgroud)

当我启动我的rails服务器时,我收到错误:

`load_missing_constant': Expected [My rails app]/app/api/v1/root.rb to define Root …
Run Code Online (Sandbox Code Playgroud)

ruby rack module ruby-on-rails grape-api

3
推荐指数
1
解决办法
3673
查看次数

Rails 3.2.11和Grape不能这样的文件:app/api/v1.rb

我试图在Rails 3.2.11应用程序中运行Grape API.根据葡萄文档,我应该在我的config/application.rb中添加以下行.

# Auto-load API and its subdirectories
config.paths.add "app/api", :glob => "**/*.rb"
config.autoload_paths += Dir["#{Rails.root}/app/api/*"]
Run Code Online (Sandbox Code Playgroud)

并使用以下代码创建config/initializers/reload_api.rb:

if Rails.env.development?
  api_files = Dir["#{Rails.root}/app/api/**/*.rb"]
  api_reloader = ActiveSupport::FileUpdateChecker.new(api_files) do
    Rails.application.reload_routes!
  end
  ActionDispatch::Callbacks.to_prepare do
    api_reloader.execute_if_updated
  end
end
Run Code Online (Sandbox Code Playgroud)

但这对我不起作用.这是我的代码.在我的app/api/v1.rb中:

module Api
  class V1 < Grape::API

    get '/hello' do
      []
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

和我的config/routes.rb:

Blog::Application.routes.draw do

  mount Api::V1 => "/"
end
Run Code Online (Sandbox Code Playgroud)

当我跑步时,rake routes我得到以下错误:

uninitialized constant Api
/home/zoloo/code/nomin/config/routes.rb:7:in `block in <top (required)>'
/home/zoloo/.rvm/gems/ruby-1.9.3-p194@rails-3.2.11/gems/actionpack-3.2.11/lib/action_dispatch/routing/route_set.rb:282:in `instance_exec'
/home/zoloo/.rvm/gems/ruby-1.9.3-p194@rails-3.2.11/gems/actionpack-3.2.11/lib/action_dispatch/routing/route_set.rb:282:in `eval_block'
/home/zoloo/.rvm/gems/ruby-1.9.3-p194@rails-3.2.11/gems/actionpack-3.2.11/lib/action_dispatch/routing/route_set.rb:260:in `draw'
/home/zoloo/code/nomin/config/routes.rb:5:in `<top (required)>'
/home/zoloo/.rvm/gems/ruby-1.9.3-p194@rails-3.2.11/gems/railties-3.2.11/lib/rails/application/routes_reloader.rb:40:in `block in …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-3 grape-api

2
推荐指数
1
解决办法
1659
查看次数

如何在葡萄中使用CanCan?

我想在我的API中使用CanCan进行授权.我怎样才能使用authorize!Grape :: API模块中的方法?现在,当我尝试使用它时,它会返回给我: undefined method 'authorize!' for #<Grape::Endpoint:0xca39664>

ruby ruby-on-rails cancan ruby-on-rails-4 grape-api

2
推荐指数
1
解决办法
1682
查看次数

Grape api - 如何发布嵌套资源?

所以,我有这个系统我正在使用 rails 4 和 Grape Api。基本上,它汇总了有关在车辆上执行的维护服务的信息。我的模型定义如下:

# service.rb

class Service < ActiveRecord::Base
  has_many :service_items


#service_item.rb

class ServiceItem < ActiveRecord::Base
  belongs_to :service
Run Code Online (Sandbox Code Playgroud)

我实现了一个 API,以便外部应用程序可以在我的系统上发布服务。每个服务都有一个关联的 1 个或多个服务项目的列表。我有一个类似的路由:example.com/api/v1/services for POST。我的问题是如何让它接受带有 service 属性和嵌套在它上面的 service_items 属性的帖子?

我阅读了 Grape 文档并开始了这样的事情:

#service_providers_api.rb

resource :services do
    desc "Post a Service"
    params do
      #requires :category_id, type: Integer
      requires :description, type: String
      requires :plate, type: String
      requires :mileage, type: Integer
      requires :date, type: Date
      optional :cost, type: BigDecimal

      requires :service_items do
         requires :description, type: Integer

      end
    end

    post do
      . …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails grape-api

2
推荐指数
1
解决办法
1693
查看次数

SImplecov - Grape API 的测试覆盖不正确

我有一个基于 Grape 的 API 的 Rails 4.2 应用程序。我开始使用 Rpsec 为它编写测试。我的测试效果很好,并测试了我的预期。但是当我rspec在终端运行时,Simplecov 没有显示 api 文件的正确覆盖范围,如下图所示。

简单冠状病毒

目录上的文件/lib/api/app 确实有一些覆盖范围。但 Simplecov 将它们显示为 0%。

为了进行比较,我使用内置的覆盖率工具在 RubyMine 中运行规范,它显示了正确的覆盖率:

在此处输入图片说明

那么,我在这里错过了什么吗?simplecov 有什么问题?

这是我的rails_helper.rb

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)

abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'spec_helper'
require 'rspec/rails'
require 'simplecov'
SimpleCov.start 'rails'

Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }


ActiveRecord::Migration.maintain_test_schema!

RSpec.configure do |config|

  config.include RSpec::Rails::RequestExampleGroup, type: :request, file_path: /spec\/api\/v1/


  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  config.use_transactional_fixtures = false


  config.infer_spec_type_from_file_location!

  Faker::Config.locale = 'pt-BR' …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails grape-api simplecov

2
推荐指数
1
解决办法
616
查看次数

了解如何从Android到Rails应用程序验证用户身份

我有一个rails应用程序,我使用Devise对应用程序的用户进行身份验证.

问题是我正在构建一个Android应用程序,我想了解如何在Android上"轻松地"验证用户的流程.我读到了Basic和Digest Auth.

或api我使用Grape https://github.com/intridea/grape,其中包含用于身份验证的Basic和Digest中间件.

我只是想知道我应该在Android应用程序上存储用户的电子邮件/密码吗?

每个api请求都应该附上用户的电子邮件/密码?

另外,在经过身份验证的响应中,我的auth标头的好处是什么?

ruby authentication ruby-on-rails devise grape-api

1
推荐指数
1
解决办法
673
查看次数

有没有办法在葡萄上修改或发送自定义标题?

我正在使用歌利亚和葡萄.在我的巨人服务器上,它调用葡萄api,如下所示:

when '/posts' then FrameworksAPI::API.call(env)
Run Code Online (Sandbox Code Playgroud)

在我的葡萄api课上,我的方法就像这样简单:

get '/:id' do
 Post.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)

我想修改标题 - 特别是'Content-Length'但不确定如何.

我还想问一个额外的问题.如何在方法GET返回结果之前专门创建回调/过滤器我想修改结果.

ruby goliath grape-api

1
推荐指数
1
解决办法
3329
查看次数

Ruby Grape:json 输出被转义

我正在处理一个示例 Ruby/Grape 示例,除了 json 被转义外,一切正常。我也是全新的 ruby​​ 及其框架(仅 3 天),如果这个问题是补救性的,那么很抱歉,并提前感谢您

我相当肯定不应该对引号进行转义,无论如何这里是转义的输出:

"{\"word\":\"test\",\"sentiment\":\"unkown\"}"
Run Code Online (Sandbox Code Playgroud)

我的代码

require 'rubygems'
require 'grape'
require 'json'

class SentimentApiV1  < Grape::API
  version 'v1', :using => :path, :vendor => '3scale'
  format :json

  resource :words do
    get ':word' do
        {:word => params[:word], :sentiment => "unkown"}.to_json
    end

    post ':word' do
      {:word => params[:word], :result => "thinking"}.to_json
    end 
  end

  resource :sentences do
    get ':sentence' do
      {:sentence => params[:sentence], :result => "unkown"}.to_json
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

配置文件

$:.unshift "./app"

需要'sentimentapi_v1.rb'

运行 SentimentApiV1

包和版本

C:\Ruby-Projects\GrapeTest>bundle install …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-grape grape-api

1
推荐指数
1
解决办法
4880
查看次数