标签: rails-api

仅允许Android应用访问Rails API的最佳做法

我没有找到任何具体的答案,大多数解决方案都是旧的,所以我想请社区人员了解保护Rails API免受其他请求的最佳做法,并且只允许Android应用程序访问它.没有用户注册或登录.Android应用只需要访问数据.

我想在我的Android应用程序中插入一个密钥,并在每个请求中传递该密钥,但这对我来说似乎不太安全.

从其他请求中保护Rails API并仅允许Android应用程序访问它的建议做法是什么?谢谢.

android ruby-on-rails rails-api ruby-on-rails-4

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

active_model_serializers不在rails-api中工作

我一直在四处寻找并找不到解决方案.

我有rails-api应用程序和简单的模型,控制器和序列化器

但是当我尝试获得索引路由时,我得到的标准rails json没有被序列化.

class Tag < ActiveRecord::Base
end

class TagSerializer < ActiveModel::Serializer
  attributes :id, :title
end

class TagsController < ApplicationController
  def index
    render json: Tag.all
  end
end
Run Code Online (Sandbox Code Playgroud)

我明白了:

[
  tag: {
    id: 1,
    title: 'kifla'
  },
  tag: 
 .....
Run Code Online (Sandbox Code Playgroud)

我想要:

[
  { id: 1, title: 'kifla'},
  { .....
Run Code Online (Sandbox Code Playgroud)

rails-api active-model-serializers ruby-on-rails-4

5
推荐指数
3
解决办法
9368
查看次数

方法级别的Rails API版本控制

在.NET中,我们能够通过对它们进行注释来在方法级别对API进行版本化,并且只复制版本之间不同的方法.我已经转而使用Rails的产品团队,并试图弄清楚是否有任何东西可以帮助我在Rails中做到这一点.到目前为止我所见过的所有内容都建议将整个控制器命名为V1,V2等模块...当假设V1和V2之间只有1种方法不同时,可以大大减少V1和V2的数量.必要的重复.

谢谢.

versioning api ruby-on-rails rails-api

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

使用Minitest为所有测试设置标头的最佳方法

.Hi.我有这个API,以及一个自定义标头,需要将所有请求传递给任何控制器.在Minitest,我应该@request.headers['Custom-Header'] = 'Custom Value'在每一次测试中都做.好吧,碰巧我有很多控制器,这个代码describe在每个文件的顶部块重复.

我试图找到一些方法来制作这款DRYer.我甚至尝试过:

module Minitest::CustomHeaderSetup
  def before_setup
    super
    @request.headers['Custom-Header'] = 'Custom Value' if @request.present?
  end

  Minitest::Test.send(:include, self)
end
Run Code Online (Sandbox Code Playgroud)

@request此刻并不存在.有什么想法吗?谢谢!

tdd bdd minitest rails-api ruby-on-rails-4

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

带rails-api和Angular JS的SPA

最近我正在尝试使用rails-api,我有一个小项目要开发,在看到rails-api的小型演示后,我认为将它用作我的服务器端会很好.我找到了这个教程:http://www.angularonrails.com/ruby-on-rails-angularjs-single-page-application/ 但是在本教程中有两个独立的服务器,在我看来不喜欢正确的方法这个.

找不到任何好的教程,解释如何使用rails-api为REST服务,并告诉服务器也提供一些html/css/js - 所以我的角度SPA将在服务旁边运行.

我没有尝试使用RubyOnRails,因为我在视图中没有用,但maby我错了?

所以我的问题是:如何使用rails-api(或ruby on rails)创建单页应用程序?

一台服务器......

ruby ruby-on-rails angularjs rails-api

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

使用active_model_serializers实现API版本控制的正确方法

我知道已经存在一些问题,而且这是一个关于AMS没有太高效地处理命名空间的问题(这种版本控制方法使用了这个问题),但我想确保我在当前的限制范围内处于正确的轨道.

现在我正在使用Rails 5和AMS 0.10.1,所以我做了以下事情:

# config/initializers/active_model_serializer.rb
ActiveModelSerializers.config.serializer_lookup_enabled = false
Run Code Online (Sandbox Code Playgroud)

禁用默认的序列化程序查找(无论如何都不起作用); 和

# app/controllers/application_controller.rb
class ApplicationController < ActionController::API
  def get_serializer(resource, options = {})
    unless options[:each_serializer] || options[:serializer] then
      serializer = (self.class.name.gsub("Controller","").singularize + "Serializer").constantize
      resource.respond_to?(:to_ary) ? options[:each_serializer] = serializer : options[:serializer] = serializer
    end
    super(resource, options)
  end
end
Run Code Online (Sandbox Code Playgroud)

覆盖默认情况下如何找到序列化程序; 我的控制器和序列化器是这样的:

# app/controllers/api/v2/api_controller.rb
module Api::V2
  class ApiController < ApplicationController
    ...

# app/controllers/api/v2/users_controller.rb
module Api::V2
  class UsersController < ApiController
    ...
Run Code Online (Sandbox Code Playgroud)

# app/serializers/api/v2/user_serializer.rb
module Api::V2
  class UserSerializer < ActiveModel::Serializer
    ...    
Run Code Online (Sandbox Code Playgroud)

现在,类似的东西ActiveModel::Serializer.serializer_for(object) …

api ruby-on-rails rails-api active-model-serializers ruby-on-rails-5

5
推荐指数
2
解决办法
1510
查看次数

ActionController :: RoutingError:未初始化的常量Api :: V1 :: ApiController

我有用于控制用户任务的Rails 5 API项目,我有以下错误,但并不总是对于相同的控制器和路由.

ActionController::RoutingError: uninitialized constant Api::V1::ApiController
Run Code Online (Sandbox Code Playgroud)

我向您描述了一些我的项目,以更详细地解释错误.

应用结构

在此输入图像描述

路线

scope module: 'api' do
  namespace :v1 do

    # => Login routes
    scope module: 'login' do
      match 'login', to: 'sessions#login', as: 'login', via: :post
    end

    # => Team routes
    scope module: 'team' do

      # => no admin routes
      resources :tasks, except: [:index] do
        collection do
          match ':view', to: 'tasks#index', as: 'tasks', via: [:get, :post]
        end
      end
    end

  end
end
Run Code Online (Sandbox Code Playgroud)

API控制器

module Api
  class ApiController < ApplicationController

    def respond_with_errors(object)
      render json: {errors: …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rails-routing rails-api ruby-on-rails-5

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

如何使用camelcased键名从Rails返回JSON

我正在构建一个带有Rails后端的JS应用程序,为了不混淆蛇和骆驼的情况,我想通过从服务器返回camelcase密钥名称来规范化它.因此从API user.last_name返回user.lastName时会返回.

我该如何实现这一目标?谢谢!

编辑:添加控制器代码

class Api::V1::UsersController < API::V1::BaseController
  # authorize_resource
  respond_to :json, only: [:index]
  def sky
      @user = User.find_by_id(params[:user_id])

      if @user
          obj =  {
              sky: {
                  sectors: @user.sectors,
                  slots: @user.slots
              }
          }

          render json: obj
      else
          raise "Unable to get Sky"
      end
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby camelcasing ruby-on-rails rails-api

5
推荐指数
2
解决办法
2194
查看次数

Rails 5的API文档工具

我有一个仅API的Rails应用,需要前端开发人员的文档。这是我的第一次体验。

您为此使用什么工具?请注意,我使用的是Rails 5 API,而不是Grape。

我测试了Apipieswagger-blocksswagger-docs 宝石,但它们已过时或越野车。必须有一个更好的选择!
尊重任何建议

ruby-on-rails api-doc swagger rails-api ruby-on-rails-5

5
推荐指数
2
解决办法
2205
查看次数

我如何获取附件的URL存储在Rails控制器的活动存储中

如何获取我的has_one模型附件的URL,该附件存储在Rails控制器的活动存储中。因此,我将能够将其作为完整链接发送为json中的api。到目前为止,我已经尝试了以下方法,但是每种方法都存在各种问题:

1)current_user.image.service_url ----#的未定义方法`service_url'

2)Rails.application.routes.url_helpers.rails_disk_blob_path(current_user.image,only_path:true),它给我的输出是:

"/rails/blobs/%23%3CActiveStorage::Attached::One:0x007f991c7b41b8%3E"
Run Code Online (Sandbox Code Playgroud)

但这不是网址,对吗?我无法在浏览器上点击图像。

3)url_for ----

undefined method `active_storage_attachment_url' for #<Api::V1::UsersController:0x007f991c1eaa98
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rails-api rails-activestorage ruby-on-rails-5.2

5
推荐指数
2
解决办法
4859
查看次数