首页 > 解决方案 > 我想创建某种 API 来通过唯一键运行 ruby​​ 程序

问题描述

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

标签: rubyrestapiserver

解决方案


这是一个非常基本的示例,说明使用Sinatra是多么容易做到这一点,这对于这种简单类型的 Web 应用程序/API 非常有用。

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

示例.json

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

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

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

或者在纯linux中

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

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

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.

另外,请记住,除了这里的密钥之外没有任何安全性,这将受到暴力攻击,但同样,这也在这个问题的范围之外。

更新

如果您需要使用自己的密钥支持多个用户,您将需要更复杂的逻辑,并且可能使用数据库来存储用户信息。如果您的 api 提供敏感信息,单独的 API 密钥可能无法提供足够的安全性。因此,您可能需要添加更多安全层。您仍然可以使用 Sinatra 构建它,但您可能希望使用Ruby on Rails 来构建您的 API


推荐阅读