Я хотел бы создать какой-то API для запуска программы ruby ​​через уникальный ключ - PullRequest
2 голосов
/ 23 сентября 2019

Я написал программу ruby, которая работает на моем локальном компьютере, и я хочу превратить ее в API-интерфейс сервера Linux, который будет отправлять обратно отформатированный файл JSON, который генерирует программа ruby.Программа ruby ​​уже работает и генерирует отдельный файл JSON на моем локальном компьютере, но я хотел бы превратить его в API, который возвращает сгенерированный JSON из программы по запросу.API должен принимать один ключ и запускать программу на основе этого ключа.Как я могу это сделать?Как это называется, что я пытаюсь достичь?Спасибо за любую помощь, которую вы можете предоставить.

1 Ответ

1 голос
/ 23 сентября 2019

Вот ОЧЕНЬ простой пример того, как легко это сделать, используя Sinatra , что хорошо для такого простого типа веб-приложений / API.

Если мы предположим, что ваша текущая программа уже отображает json в статический файл, например.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...