Как создать REST API для приложения на Ruby? - PullRequest
10 голосов
/ 02 ноября 2009

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

Ответы [ 4 ]

26 голосов
/ 02 ноября 2009

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

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

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

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

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

9 голосов
/ 24 сентября 2013

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

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

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

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

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

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

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

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

Редактировать : опечатка

7 голосов
/ 04 ноября 2009

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

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

Следует помнить, что Синатра не обычный MVC только потому, что де М (модель). Чтобы использовать sinatra для веб-приложений Simple CRUD, вам просто нужно загрузить гем.

require 'datamapper'

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

и вуаля, вы получили ОРМ под своей Синатрой.

В Синатре вы определяете маршруты, которые подчиняются четырем основным предложениям 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. Для дальнейшего прочтения оформить заказ Синатра :: База.

1 голос
/ 31 января 2013

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

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