Tag: api

Rails – 通过Active Resource使用API​​时URL中包含多个值的参数

我正在使用API​​,希望我以下列格式执行请求: ?filter=value1&filter=value2 但是,我正在使用Active Resource,当我指定:params hash时,我不能使相同的参数在URL中出现两次,我认为这是正确的。 所以我不能这样做: :params => {:consumer_id => self.id, :filter => “value1”, :filter => “value2” } ,因为哈希的第二个filter索引将被忽略。 我知道我可以传递一个数组(我认为这是正确的方法),如下所示: :params => {:consumer_id => self.id, :filter => [“value1″,”value2”] } 这将生成如下URL: ?filter[]=value1&filter[]=value2 对我来说似乎没问题,但API不接受它。 所以我的问题是: 传递具有多个值的参数的正确方法是什么? 它是语言特定的吗? 谁决定这个?

在Ruby on Rails中使用由外部API支持的模型的ActiveRecord接口

我正在尝试在我的Rails应用程序中使用模型从外部API检索信息。 我想要做的是以类似于ActiveRecord模型提供的方式访问我的数据模型(可能包含多个API调用产生的信息)(特别是关联,以及相同类型的可链式查询方法)。 我最初的本能是重新创建我想要的ActiveRecord部分并合并这个API。 不想“重新发明轮子”并确切地看到增加更多function需要多少工作让我退后一步并重新评估如何处理这个问题。 我已经找到了在没有表的情况下使用ActiveRecord的方法(参见:Railscast#193 Tableless Model和这里的博客文章)并查看了ActiveRecord。 因为ActiveModel似乎只包含Validations,所以我不确定在这种情况下它是否非常有用。 在没有表格的情况下使用ActiveRecord的解决方法似乎是最好的选择,但我怀疑有一种更清洁的方式来实现这一点,我只是没有看到。 这是一个要点,其中包含我尝试重新创建ActiveRecordfunction时编写的一些代码,这些代码是从ActiveRecord源本身大量借用的。 我的问题归结为:我可以通过实现上面指定的ActiveRecord的变通方法或者自己重新创建function来获得我想要的function(链接查询方法,关系),但这些是非常理想的解决方案吗?

如何在Ruby on Rails中调用API(例如Flickr API)? 新手问题

我在rails中构建我的第一个应用程序,我想调用Flickr的API 我知道我可以使用flickr-fu,rflickr或其他gem,但我想从头开始自己学习 比方说,我想调用flickr.photos.comments.getList来返回照片的评论。 参数是api_key和photo_id。 我有两个。 我将以xml的forms获得响应 Umm, I’m not sure, can I get back to you on that one? ` 我想通过调用该方法将收到的数据存储到一个变量comments ,我可以使用它来访问数据,例如, comments.all.first.author_name = “Rev Dan Catt” 要么 comments.all.first.content = “Umm, I’m not sure, can I get back to…” 我怎样才能做到这一点? 请耐心等待(对于noob问题抱歉)

使用Devise进行API身份validation(Ruby on Rails)

我正在尝试使用设计配置:token_authenticatable在我的项目中通过json添加身份validation。 我有从本文中获取的工作sessions_controller #create代码 – http://blog.codebykat.com/2012/07/23/remote-api-authentication-with-rails-3-using-activeresource-and-devise / def create build_resource resource = User.find_for_database_authentication(:email => params[:email]) return invalid_login_attempt unless resource if resource.valid_password?(params[:password]) resource.ensure_authentication_token! #make sure the user has a token generated render :json => { :authentication_token => resource.authentication_token, :user_id => resource.id }, :status => :created return end end def invalid_login_attempt warden.custom_failure! render :json => { :errors => […]

REST API:使用cookie和会话的自定义方法

我正在尝试使用REST API,所以我想从一个RoR APP1中获取APP2中的@current_user。 在APP1 /config/routes.rb中我有这个代码: resources :users do collection do get ‘current’ end end 在APP1 /controllers/application_controller.rb中我有这样的代码: before_filter :current_user def current_user if cookies[:remember_me] current_user = user_from_cookie else current_user = User.find_by_id(session[:current_user_id]) end unless !current_user.nil? default_current_user = User.find_by_id(1) end return @current_user = current_user.nil? ? default_current_user : current_user end 在APP1 /controllers/users_controller.rb我有这个代码: def index … end def show … end […]

在rails应用程序中缓存对外部API的调用

rails app(4)使用HTTParty调用外部API。 API是只读的。 需要缓存,因为数据不会经常更改(24小时),并且API每小时只允许有限数量的呼叫。 我想我需要某种基于散列的缓存,我将使用“params / sent / to / the / api”作为密钥。 用于缓存的Rails工具似乎只适用于页面,片段或SQL。 我该怎么做才能缓存对外部API的调用?

从ActiveResource请求中删除.xml扩展名

我正在尝试使用ActiveResource来使用来自第三方API的xml数据。 我可以使用RESTClient应用程序成功进行身份validation和发出请求。 我编写了我的应用程序,当我提出请求时,我收到404错误。 我补充说: ActiveResource::Base.logger = Logger.new(STDERR) 到我的development.rb文件并找出问题所在。 API使用xml数据响应不以xml结尾的请求。 EG,这适用于RESTClient: https://api.example.com/contacts 但ActiveResource正在发送此请求 https://api.example.com/contacts.xml 无论如何,从ActiveResource生成的请求中删除扩展名是否“很好”? 谢谢

如何确保从CSRF保护Rails API?

我一直在使用REST API开发Rails应用程序,以便从移动应用程序进行访问。 它运作得很好。 当用户从移动应用程序登录时,他获得了auth_token ,这是他在将来对API的请求中使用的。 问题是,通过转到路径/ api / v1 / …也可以从Web访问API,因此必须保护它不受CSRF的影响。 我有BaseApiController类,它inheritance自ApplicationController ,其中protect_from_forgery “enabled”。 这是一个例子: class Api::V1::BaseApiController < ApplicationController # … end class ApplicationController < ActionController::Base protect_from_forgery # … end 现在,当我使用auth_token对我的API auth_token非GET请求时,我的请求成功完成,但在日志中我可以看到着名的WARNING: Can’t verify CSRF token authenticity 。 如果我从我的BaseApiController删除protect_from_forgery ,我没有得到任何警告(显然),但是我的API容易受到CSRF攻击(我做了一个简单的HTML表单,当没有protect_from_forgery时成功地跨域更改数据)。 我的问题是:如何确保我的API保持安全,但在执行非GET请求时也会删除警告? 这是我提出的解决方案之一,但它看起来更像是一个黑客并执行一个额外的数据库查询: class Api::V1::BaseApiController 0 end end 关于该项目的更多细节:Rails 3.2.14,Devise,AngularJS。 该项目的源代码可以在这里找到。

Rails JSON API使用JSON中的PARAMS测试POST请求

这是困扰我一段时间的问题。 我正在构建一个API函数,它应该在json中接收数据并在json中接收响应。 我的控制器测试运行正常(因为我抽象数据到达那里已经从JSON解码,只需要解释答案)。 我也知道该函数运行正常,因为我使用curl测试它与JSON参数,它完美地工作。 (例如:curl -i –header“Accept:application / json”–header“Content-Type:application / json”-d'{“test”:{“email”:“andreo@benjamin.dk”}} ‘) 但显然我想编写请求(function)测试来自动测试这个,我看到它应该像curl一样工作,即点击我的服务就像是外部调用。 这意味着我想在JSON中传递参数并得到答案。 我很遗憾,因为所有的例子我都能看到人们对待已经被解码的论点。 我的问题是:我正在遵循一个错误的前提,想要发送参数并请求作为JSON,因为我将测试rails的工作原理,因为这是它的责任吗? 但我想看看我的代码对错误的参数有多强大,并且想尝试使用JSON。 这种类型的东西: it “should return an error if there is no correct email” do params = {:subscription => {:email => “andre”}} post “/magazine_subscriptions”, { ‘HTTP_ACCEPT’ => “application/json”, ‘Content-Type’ => ‘application/json’, ‘RAW_POST_DATA’ => params.to_json } end 你知道这有可能吗? 如果您认为我测试错了,请告诉我。 祝一切顺利, 安德烈

omn​​iauth(自定义策略)/门卫的法拉第超时错误

我正在关注这个railscast,并且针对我的具体情况,我遇到了来自omniauth的回调的法拉第超时错误。 目前我使用rails应用程序作为API和骨干作为javascript前端(在同一个应用程序中) 我决定用OAuth锁定API并为Omniauth提供自定义策略以作为客户端访问API以及门卫来处理授权逻辑 module OmniAuth module Strategies class Twiddle < OmniAuth::Strategies::OAuth2 option :name, :twiddle option :client_options, { site: "http://localhost:3001", authorize_path: "/oauth/authorize" } uid do raw_info["id"] end info do { firstName: raw_info["firstName"], lastName: raw_info["lastName"], email: raw_info["email"] } end def raw_info @raw_info ||= access_token.get('/api/v1/user').parsed end end end end 我包括这样的自定义策略: require File.expand_path(‘lib/omniauth/strategies/twiddle’, Rails.root) Rails.application.config.middleware.use OmniAuth::Builder do provider :twiddle, […]