我没有找到任何具体的答案,大多数解决方案都是旧的,所以我想请社区人员了解保护Rails API免受其他请求的最佳做法,并且只允许Android应用程序访问它.没有用户注册或登录.Android应用只需要访问数据.
我想在我的Android应用程序中插入一个密钥,并在每个请求中传递该密钥,但这对我来说似乎不太安全.
从其他请求中保护Rails API并仅允许Android应用程序访问它的建议做法是什么?谢谢.
我一直在四处寻找并找不到解决方案.
我有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) 在.NET中,我们能够通过对它们进行注释来在方法级别对API进行版本化,并且只复制版本之间不同的方法.我已经转而使用Rails的产品团队,并试图弄清楚是否有任何东西可以帮助我在Rails中做到这一点.到目前为止我所见过的所有内容都建议将整个控制器命名为V1,V2等模块...当假设V1和V2之间只有1种方法不同时,可以大大减少V1和V2的数量.必要的重复.
谢谢.
.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此刻并不存在.有什么想法吗?谢谢!
最近我正在尝试使用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)创建单页应用程序?
一台服务器......
我知道已经存在一些问题,而且这是一个关于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
我有用于控制用户任务的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) 我正在构建一个带有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) 我有一个仅API的Rails应用,需要前端开发人员的文档。这是我的第一次体验。
您为此使用什么工具?请注意,我使用的是Rails 5 API,而不是Grape。
我测试了Apipie,swagger-blocks和swagger-docs 宝石,但它们已过时或越野车。必须有一个更好的选择!
尊重任何建议
如何获取我的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