ruby - 我想创建某种 API 来通过唯一键运行 ruby 程序
问题描述
我写了一个运行在本地机器上的 ruby 程序,我想把它变成一个 linux 服务器 API,它会发回 ruby 程序生成的格式化 JSON 文件。ruby 程序已经可以工作,并在我的本地机器上生成一个单独的 JSON 文件,但我想把它变成一个 API,根据请求从程序返回生成的 JSON。API 应该接受单个密钥,并基于该密钥运行程序。我怎样才能做到这一点?我想要完成的任务叫什么?感谢您提供任何帮助。
解决方案
这是一个非常基本的示例,说明使用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。
推荐阅读
- python - 使用 gitpython 从远程存储库添加 git 子模块
- android-studio - HMS Toolkit Android Studio 初始化失败
- excel - 如何在Excel中制作动态依赖下拉列表
- ios - 使用 iBeacon 时在 iOS 中最小化 Beacon Ranging 的电池消耗
- mysql - 取消嵌套节点数据库调用
- .net - 在 main 方法中区分应用程序
- f# - 在匹配的一个分支中使用异步方法
- algorithm - 6 平面图上的颜色定理递归实现
- python-3.x - 如何正确登录 facebook 移动网站
- ios - 如何知道/检测前台的应用程序何时会在 iOS 上转到后台