ruby - 我想创建某种 API 以通过唯一 key 运行 ruby​​ 程序

标签 ruby rest api server

我编写了一个在我的本地机器上运行的 ruby​​ 程序,我想把它变成一个 linux 服务器 API,它将发回 ruby​​ 程序生成的格式化 JSON 文件。 ruby 程序已经可以运行,并在我的本地机器上生成一个单独的 JSON 文件,但我想将它变成一个 API,根据请求从程序返回生成的 JSON。 API 应接受单个 key ,并根据该 key 运行程序。我怎样才能做到这一点?我想要完成的事情叫什么?感谢您提供的任何帮助。

最佳答案

这是一个非常基本的示例,说明使用 Sinatra 可以轻松做到这一点,它非常适合此类简单类型的 Web 应用程序/API。

例如,如果我们假设您当前的程序已经将 json 呈现为静态文件。

示例.json

[
  {
    "item1": {
      "foo": "bar"
    },
    "item2": {
      "baz": "qux"
    }
  }
]

在您的 Linux 系统上,您应该有一些安全的随 secret 钥集。假设安装了 ruby​​,您也可以使用一个衬垫来做到这一点。

ruby -e 'require "SecureRandom"; puts SecureRandom.hex(32)'

或者在纯 linux 下

date +%s | sha256sum | base64 | head -c 64 ; echo

然后在服务器的启动脚本中,您需要确保导出 key 。

export API_KEY=ODAzN2EzMmI2YTc2ZDIzZjA5NzRmYmJiNjJjYmE4OGUyYjVjMDM0ZWJkZWU4NmMz

然后在与你的 json 文件相同的路径下,编写一个名为 api.rb

的文件
# api.rb
require 'sinatra'

get '/api' do
  if params['key'] == ENV['API_KEY']
    return File.read 'sample.json'
  else
    status 401
  end
end

默认情况下,Sinatra 在端口 4567 上运行,因此您需要在您的服务器上公开它,这似乎超出了您的 Ruby 问题的范围。

根据您托管它的方式和位置,您需要将服务器配置为在启动时运行该应用程序。对于您的本地开发,您可以从终端运行它。

ruby app.rb

要查看它的工作情况,只需访问

http://localhost:4567/api?key= # <<-- paste your key here.

此外,请记住,除了这里的 key 之外没有任何安全措施,这将受 brute force attacks 的约束,但同样,这也不在这个问题的范围内。

更新

如果您需要使用自己的 key 支持多个用户,您将需要更复杂的逻辑并且可能使用数据库来存储用户信息。如果您的 API 提供敏感信息,仅 API key 可能无法提供足够的安全性。所以您可能想要添加更多的安全层。您仍然可以使用 Sinatra 构建它,但您可能想改用 Ruby on Rails to build your API

关于ruby - 我想创建某种 API 以通过唯一 key 运行 ruby​​ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58054445/

相关文章:

.NET/Entity Framework Core/SQL Server 过程返回重复值

ruby - Homebrew 软件卸载 ruby

ruby - 如何设置变量除以四舍五入到小数点后 0 位?

python - Bottle:异步执行长时间运行的函数并向客户端发送早期响应?

swift - 如何在 swift 中执行 curl 请求?

c# - 如何安全地将 API 凭据存储在 GitHub 上共享的 C# 文件中?

ruby-on-rails - Rails 3 包含 Controller 内部的嵌套模块

ruby-on-rails - 如何结合载波有条件地显示存在验证?

rest - Grails REST 客户端插件 - 指定 header 数据

rest - 在 RESTful 响应中包含聚合信息时的 URI