小编Jas*_*rip的帖子

Dogfooding我们自己的速率限制API

概述:

我公司开发了一个限速API.我们的目标是双重的:

  • 答:围绕我们的产品创建强大的开发者生态系统.
  • B:通过使用它来驱动我们自己的应用程序,展示我们API的强大功能.

澄清:为什么要限价?

我们限制我们的API,因为我们将其作为产品的补充销售.对我们的API的匿名访问每小时API调用的门槛非常低,而我们的付费客户每小时允许超过1000个呼叫或更多.

问题:

我们的速率限制API非常适合开发人员生态系统,但为了让我们食用它,我们不能将它限制在相同的速率限制范围内.我们API的前端是所有JavaScript,直接对API进行Ajax调用.

所以问题是:

如何保护api,以便在移除速率限制的过程中可以消除速率限制,不能轻易欺骗?

探索的解决方案(以及他们为什么不工作)

  1. 根据主机头验证引用者.- 有缺陷,因为推荐人很容易伪造.

  2. 使用HMAC根据请求和共享密钥创建签名,然后在服务器上验证请求.- 有缺陷,因为通过查看前端JavaScript可以轻松确定秘密和算法.

  3. 代理请求并在代理中签署请求 - 仍然存在缺陷,因为代理本身公开了API.

问题:

我期待Stack Overflow上出色的思想提出替代解决方案.你会如何解决这个问题?

javascript api rest

116
推荐指数
5
解决办法
6712
查看次数

将字符串与多个模式匹配

如何在ruby中使用正则表达式将字符串与多个模式匹配.

我试图看一个字符串是否包含在前缀数组中,这不起作用,但我认为它至少证明了我要做的事情.

# example:
# prefixes.include?("Mrs. Kirsten Hess")

prefixes.include?(name) # should return true / false

prefixes = [
  /Ms\.?/i,
  /Miss/i,
  /Mrs\.?/i,
  /Mr\.?/i,
  /Master/i,
  /Rev\.?/i,
  /Reverend/i,
  /Fr\.?/i,
  /Father/i,
  /Dr\.?/i,
  /Doctor/i,
  /Atty\.?/i,
  /Attorney/i,
  /Prof\.?/i,
  /Professor/i,
  /Hon\.?/i,
  /Honorable/i,
  /Pres\.?/i,
  /President/i,
  /Gov\.?/i,
  /Governor/i,
  /Coach/i,
  /Ofc\.?/i,
  /Officer/i,
  /Msgr\.?/i,
  /Monsignor/i,
  /Sr\.?/i,
  /Sister\.?/i,
  /Br\.?/i,
  /Brother/i,
  /Supt\.?/i,
  /Superintendent/i,
  /Rep\.?/i,
  /Representative/i,
  /Sen\.?/i,
  /Senator/i,
  /Amb\.?/i,
  /Ambassador/i,
  /Treas\.?/i,
  /Treasurer/i,
  /Sec\.?/i,
  /Secretary/i,
  /Pvt\.?/i,
  /Private/i,
  /Cpl\.?/i,
  /Corporal/i,
  /Sgt\.?/i,
  /Sargent/i,
  /Adm\.?/i,
  /Administrative/i,
  /Maj\.?/i,
  /Major/i,
  /Capt\.?/i,
  /Captain/i,
  /Cmdr\.?/i,
  /Commander/i,
  /Lt\.?/i,
  /Lieutenant/i,
  /^Lt Col\.?$/i,
  /^Lieutenant Col$/i, …
Run Code Online (Sandbox Code Playgroud)

ruby regex

46
推荐指数
2
解决办法
2万
查看次数

github是否允许预先接收挂钩?

GitHub是否允许预先接收或更新挂钩?

我要做的是防止主分支被推送到(即master,hotfix,develop)并要求它们通过GitHub pull请求合并.这是一个私人仓库,所以GitHub样式分叉不是一个选择.

关于如何实现这一点的任何建议都会有很大的帮助.

git github

36
推荐指数
3
解决办法
2万
查看次数

寻找宝石根

有没有办法知道我宝石的根路径?我正在尝试从gems路径中的yaml加载默认配置.如何使用ruby获取gems根目录?

ruby gem

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

Rails强迫模型加载

我希望能够加载整个应用程序,以便我可以找到给定类的后代.

例如,给定我定义了以下类:

# app/models/foo_class.rb
class FooClass < MySpecialBaseClass
  # pasta code
end
Run Code Online (Sandbox Code Playgroud)

它不会被发现:

irb> ObjectSpace.each_object.select { |obj| obj.is_a?(Class) && obj <= MySpecialBaseClass }
=> []
Run Code Online (Sandbox Code Playgroud)

直到我调用const:

irb> FooClass
Run Code Online (Sandbox Code Playgroud)

然后它返回:

irb> ObjectSpace.each_object.select { |obj| obj.is_a?(Class) && obj <= MySpecialBaseClass } 

=> [FooClass]
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

ruby ruby-on-rails

21
推荐指数
4
解决办法
1万
查看次数

PUT方法form_for

我正在使用以下内容尝试在表单上设置PUT方法,但它仍然在做一个帖子.我已经提到了文档,似乎我正确地做到了这一点.

form_for @firm, html: {autocomplete: "off"}, url: firm_path, method: :put do |f|
...
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-3

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

防止gem推送到RubyGems

NPM具有阻止宝石出版的能力.有没有办法做同样的事情,并防止宝石意外发布到rubygems?

ruby rubygems

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

在Systemd中引用其他环境变量

在systemd中设置新的变量时是否可以引用其他环境变量?

[Service]
EnvironmentFile=/etc/environment
Environment=HOSTNAME=$COREOS_PRIVATE_IPV4
Environment=IP=$COREOS_PRIVATE_IPV4
Environment=FELIX_FELIXHOSTNAME=$COREOS_PRIVATE_IPV4
Run Code Online (Sandbox Code Playgroud)

上面的代码似乎不起作用.

systemd

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

使用Rails 3.1:as =>:admin更新受attr_accessible保护的属性

在阅读了Rails 3.1 API中的attr_accessible后,我发现其中有一个as :admin选项.我想知道两件事.

  1. 如果用户有一个admin标志,我的控制器如何告诉我的模型用户是管理员.

  2. 如果用户是所有者,我可以:as => owner在我的模型中指定,并且我的控制器如何通知我的模型他们是项目的所有者.

ruby-on-rails mass-assignment attr-accessible ruby-on-rails-3.1

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

如何正确迭代参数

如何在控制器中循环使用params以便我可以更改它们的值?

这个:

...
params[:contact][:relationships_attributes].each do |rel|
  rel[:contact_ids] = [rel[:contact_ids]]
end
...
Run Code Online (Sandbox Code Playgroud)

返回错误:

# can't convert Symbol into Integer
Run Code Online (Sandbox Code Playgroud)

为了提供更多上下文,我使用单个选择框代替多选.所以控制器期待一个数组,而不是它获得一个值.

这是我的参数:

{"utf8"=>"?",
"_method"=>"put",
"authenticity_token"=>"8FrW59t9vzSep+jEGceMdE/b5q69i5hrEp08yZJJk0o=",
"contact"=>
  {"first_name"=>"John",
   "last_name"=>"Smith",
   "email_addresses_attributes"=>
    {"0"=>
      {"value"=>"john.smith@gmail.com",
       "type"=>"Home",
       "_destroy"=>"false",
       "id"=>"4f4eea6dbe5a2ccf03000031"
      },
       "1"=>{"value"=>"john@smith.com",
       "type"=>"Home",
       "_destroy"=>"false",
       "id"=>"4f4eea7dbe5a2ccf03000035"
      }
    },
  "phone_numbers_attributes"=>
    {"0"=>
      {"value"=>"555-334-5959",
       "type"=>"Home",
       "_destroy"=>"false",
       "id"=>"4f4eea64be5a2ccf0300002c"}
    },
  "addresses_attributes"=>
    {"0"=>
      {"type"=>"Home",
       "street_address"=>"12345 Any Rd",
       "city"=>"Anytown",
       "state"=>"CO",
       "country"=>"United States",
       "_destroy"=>"false",
       "id"=>"4f4eea64be5a2ccf0300002d"
      }
    },
  "relationships_attributes"=>
    {"1330623965418"=>
      {"contact_ids"=>"4f4e6696be5a2ca2a7000045",
       "title"=>"Wife",
       "_destroy"=>"false"
      }
    }
  },
  "commit"=>"Update Contact",
  "id"=>"4f4e6696be5a2ca2a7000045"
}
Run Code Online (Sandbox Code Playgroud)

ruby hash ruby-on-rails ruby-on-rails-3

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

Rails 3.2模型在测试环境中的初始化器之前加载

我正在将rails应用程序从3.0.20升级到3.2.13.似乎当我的测试环境将cache_classes设置为true时,模型将在初始化器之前加载.这导致一些错误,因为我的初始化器有一些模型的设置代码.同样奇怪的是,在使用cache_classes = true的生产中,我没有遇到同样的问题.任何人都可以指出我在这里正确的方向.

ruby-on-rails

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

Gemfile.lock,Bundler和Capistrano部署

我正在尝试部署,我不希望版本控制中的Gemfile.lock.但当它被删除时,我得到以下错误.

* executing "cd /var/www/vhosts/my-site/releases/20120628162217 && bundle install --       gemfile /var/www/vhosts/mysite/releases/20120628162217/Gemfile --path  /var/www/vhosts/my-site/shared/bundle --deployment --quiet --without development test cucumber  analytics"
    servers: ["staging-beta.my-site.com"]
[staging-beta.my-sitehealth.com] executing command
** [out :: staging-beta.my-site.com] The --deployment flag requires a Gemfile.lock.     Please make sure you have checked your Gemfile.lock into version control before deploying.
    command finished in 332ms
Run Code Online (Sandbox Code Playgroud)

这是我的deploy.rb文件:

require 'thinking_sphinx/deploy/capistrano'

set :rvm_ruby_string, '1.9.3'

# Ignore the .git directory when creating a release
set :copy_exclude, ".git*"

set :stages, %w(production staging rails_ec2_west_staging vagrant analytics highgroove ec2_highgroove stage_analytics …
Run Code Online (Sandbox Code Playgroud)

ruby capistrano ruby-on-rails bundler

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