我想创建一些API,通过一个唯一的键来运行ruby程序

我想创建一些API,通过一个唯一的键来运行ruby程序,ruby,rest,api,server,Ruby,Rest,Api,Server,我编写了一个在本地机器上运行的ruby程序,我想把它转换成一个linux服务器API,它将发回ruby程序生成的格式化JSON文件。ruby程序已经可以运行了,并且在我的本地机器上生成了一个单独的JSON文件,但是我想将它转换成一个API,根据请求从程序返回生成的JSON。API应该接受单个键,并基于该键运行程序。我该怎么做?我想完成的任务叫什么?感谢您提供的任何帮助。下面是一个非常简单的示例,说明了使用这种简单类型的web应用程序/API是多么容易 例如,如果我们假设您当前的程序已经将json

我编写了一个在本地机器上运行的ruby程序,我想把它转换成一个linux服务器API,它将发回ruby程序生成的格式化JSON文件。ruby程序已经可以运行了,并且在我的本地机器上生成了一个单独的JSON文件,但是我想将它转换成一个API,根据请求从程序返回生成的JSON。API应该接受单个键,并基于该键运行程序。我该怎么做?我想完成的任务叫什么?感谢您提供的任何帮助。

下面是一个非常简单的示例,说明了使用这种简单类型的web应用程序/API是多么容易

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

sample.json 在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.

http://localhost:4567/api?key= #您应该仔细阅读如何在中创建JSON APIruby@maxpleaner这是否允许在get请求中发送密钥?密钥是必需的,每个唯一的密钥根据ruby程序生成一个不同的json文件。如果多人同时使用该程序,会不会导致任何问题?程序生成的JSON文件对于每个请求都是不同的,因此我主要担心的是,如果多人从同一个JSON文件中读取,它不会为其中一个用户返回正确的JSON。您的用户数量有限吗?有多少这份名单需要随着时间的推移而增加吗?这当然需要改变以支持这一点。你如何分发钥匙?听起来你需要一个结构更完整的web应用程序api,并以数据库为后盾来存储用户信息、密钥等。因此,你可能更倾向于ruby程序的工作方式,因为它需要两个哈希查询(用户名和密码),并在使用用户名和密码进行操作后生成JSON文件。因此,基于用户名和密码,JSON文件将完全不同。一次的用户数量很可能永远不会超过36个,但应该有潜在的增长空间。我的问题是,我如何使用这些查询与ruby程序交互并发回由它生成的JSON?@Alien您应该将当前ruby程序合并到API应用程序中。但我不知道那个程序是什么样子。在这个问题上,我已经给了你尽可能多的帮助。现在您需要阅读Sinatra和Rails,并决定哪一个最适合您的用例。然后继续,将完全工作的API构建为单个ruby应用程序。
http://localhost:4567/api?key= # <<-- paste your key here.