我编写了一个在我的本地机器上运行的 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/