Как создать REST API для приложения Ruby?

Я хотел бы знать, как предоставить приложение Ruby API REST. Я мог бы кодировать что-то, основанное на Ruby TCPServer API, но это выглядит немного низкоуровневым. Как вы думаете, это будет хорошее решение? Или вы рекомендуете лучший подход?

Ответ 1

Вы можете использовать Sinatra, чтобы очень быстро писать крошечные, ориентированные веб-приложения и облегченные службы REST.

В разделе documentation они выделяют пару видео по этому вопросу:

  • Адам Виггинс и Блейк Мизерэни представляют Синатру и RestClient в RubyConf 2008. Детали беседы Sinatras лежат в основе философии и отражают использование Sinatra для создания приложений реального мира.

  • Адам Кейс и Прагматические программисты начали серию screencasts на Синатре. Первые два эпизода охватывают создание крошечного веб-приложения и создание службы REST. $5 поп.

Вы также можете использовать rails, но это немного перебор...

Ответ 2

При проектировании RESTful API существует несколько уровней, и на каждом уровне существует несколько действительных подходов.

TCPServer действительно очень низкий уровень, так как вам придется самому реализовать HTTP-протокол, который не рекомендуется.

Один шаг вверх - это Rack, который заботится обо всех деталях HTTP низкого уровня. Это то, что все веб-фреймы Ruby, такие как Rails, Sinatra или Ramaze, используются под капотом. Он также гарантирует, что ваше приложение работает на разных серверах приложений, таких как "Пассажир", "Тонкий" или "Единорог".

Но даже Rack все еще находится на низком уровне, он дает вам HTTP, но структуры более высокого уровня берут шаблон из типичного веб-программирования. Для API вы можете посмотреть минимальную структуру, такую ​​как Sinatra, или фреймворк, специально разработанный для API, например Grape или Rails:: API. Они уже предполагают API стиля RESTful, поэтому вы должны найти их естественным образом.

Типичные API-интерфейсы RESTful характеризуются наличием ресурсов, идентифицированных с помощью допустимых URL-адресов, и операций с теми, которые основаны на HTTP-методах (глаголах), таких как GET, POST, PUT, DELETE и PATCH. Чтобы по-настоящему принять дух REST, как это было описано Роем Филдингом, вы можете перейти к более полному API "Hypermedia". Наиболее заметным отличием является то, что ответы более автономны. Они имеют четко определенные типы медиа (определенные самим собой или существующими спецификациями), содержащие ссылки на связанные ресурсы, а не просто числовые идентификаторы. Аналогичным образом ответы содержат шаблоны/формы, описывающие операции, которые могут быть выполнены. (Существует больше, но на уровне поверхности, что вы заметите.)

Это делает API более доступным для обнаружения, как людьми, так и машинами, и это обеспечивает большую свободу в развитии API. Может быть недостаток производительности, поскольку клиенту обычно нужно делать больше запросов для достижения того же, но это может быть предотвращено продуманным дизайном и кэшированием. Garner специально сделано для обеспечения простого кеширования на стороне сервера.

Вы можете определить свои собственные типы медиа, которые подходят вашему приложению, обычно поверх JSON или XML, или вы можете посмотреть существующие спецификации, в частности Collection + JSON, HAL и JSON-API, На данный момент HAL имеет наибольшее сцепление с несколькими библиотеками, доступными на разных платформах.

По-видимому, не так много происходит вокруг JSON-API, но два проекта signifacnt, ActiveModel:: Serializers и Ember-data, одновременно принимают (и в то же время разрабатывают) этот формат, что означает, что он может стать популярный выбор в мире Ruby/Rails.

Изменить: typo

Ответ 3

Я также использую Sinatra для разработки простых решений REST.

Дело в том, что Синатра настолько гибка во многих отношениях. Вы можете построить свою структуру проекта так, как вам нравится больше. Обычно у нас есть lib/tmp/и общедоступные/каталоги, файлы config.ru и app.rb, но, как я сказал, вы можете создавать все, что захотите.

Помните, что Sinatra - это не обычный MVC только потому, что M (модель). Для использования синатра для простых веб-приложений CRUD вам нужно просто загрузить драгоценный камень.

require 'datamapper'

или другой по вашему выбору, например sqlite, sequel, ActiveRecord, ...

и у вас есть ORM под вашей Синатрой.

Под Sinatra вы определяете маршруты, которые подчиняются четырем основным предложениям: GET, PUT POST и DELETE.


require 'rubygems'
require 'sinatra'

get '/' do
  erb :home
end

get '/API/*' do
  api = params[:splat]
  @command_test = api[0]
  @command_helo = api[1]
  #...
  def do_things(with_it)
    #...
  end
  #...
end

__END__

@@home

helo

ну у тебя есть идеа:)

Наконец-то. Изучение Синатры не пустая трата времени из-за простоты и потому, что она дает (мне) основы того, что такое веб-программирование. Я думаю, что в ближайшем будущем будет возможно "внедрить" приложения Sinatra (Rack Apps) в проект Rails3.

Взгляните на github, там вы найдете много проектов, построенных с помощью Sinatra. Для дальнейшего ознакомления с покупкой Sinatra:: Base.

Ответ 4

Для простых API REST я бы также рассмотрел возможность работы непосредственно с библиотекой Rack (т.е. вам может не понадобиться инфраструктура, например Sinatra). Например, маршрутизация может быть довольно простой для простых случаев. Я привел здесь небольшой пример: https://gist.github.com/4685445