Использование REST API из приложения Rails - PullRequest
26 голосов
/ 22 марта 2011

Я создаю свое первое Rails-приложение и хочу, чтобы оно потребляло все из REST API.Я хочу, чтобы Rails служил моим веб-приложением в качестве интерфейса к моему API.Насколько я читал (я сейчас смотрю на Rails), у Rails большой потенциал с ORM и прямым доступом к системам баз данных.Моя платформа, с другой стороны, разработана таким образом, что доступ к каждому слою осуществляется через определенный интерфейс (в данном случае REST API), поэтому базы данных не считываются ни с одного клиента, а через их интерфейсы.

Например, мой API предоставляет следующий ресурс:

https://api.example.com/v1/users/feature-xxx [GET]

И я хочу, чтобы у моего веб-приложения была такая страница:

https://example.com/feature

Таким образом, пользователи будут посещать этот URL иПри входе в систему приложение Rails будет запрашивать данные для создания этого динамического содержимого из моего API.

Вопрос:

  • Каковы необходимые шаги для использования приложения Railsего данные из HTTP / Rest Backend?и,
  • Это хороший дизайн для приложения Rails?

Спасибо!

Ответы [ 4 ]

31 голосов
/ 13 апреля 2013

ActiveResource больше не включается в Rails 4.0. Говорят, что в наши дни он почти не поддерживается, и его сложно настроить для конечных точек API REST, которые не сформулированы в соответствии с «способом Rails».

После некоторых исследований я очень одобряю использование Фарадея . Включает поддержку использования различных адаптеров HTTP-запросов. Он может использовать EventMachine напрямую или такие библиотеки, как Typhoeus, когда вы решите работать одновременно. Он также поддерживает Rack-подобное промежуточное ПО для плавного включения, скажем, аутентификации.

Для REST ORM в Rails, который легко настраивается, относительно новый (около года назад) Ее выглядит очень многообещающе и использует Фарадей.

Обновление

Я полностью <3 <a href="https://github.com/rest-client/rest-client" rel="noreferrer"> RestClient . Так просто. Если вам нужна функциональность в стиле ORM, то вам понадобится высокоуровневая абстракция, но для простого использования API вы не сможете превзойти ее простоту. Он просто делает то, что должен делать без суеты, имеет разумные значения по умолчанию и имеет возможность устанавливать расширенные параметры, такие как заголовки аутентификации.

21 голосов
/ 22 марта 2011

Я очень рекомендую ActiveResource для ваших требований. Мой опыт с этим был действительно хорош. При условии, что API, который вы намереваетесь использовать, является действительно REST, я не думаю, что есть какой-то более чистый дизайн для потребления данных через REST API. Из README,

Активный ресурс

Активный ресурс (ARes) соединяет бизнес-объекты и Представительный государственный трансферт (REST) веб-сервисы. Это реализует объектно-реляционное отображение для REST web услуги по обеспечению прозрачности возможности проксирования между клиентом (ActiveResource) и сервис RESTful (который предоставляется просто RESTful роутинг в ActionController :: Ресурсы).

Философия

Активный ресурс пытается обеспечить связную оболочку объектно-реляционное отображение для REST web Сервисы. Следует то же самое философия как Active Record, в том одна из его главных целей состоит в том, чтобы уменьшить количество кода, необходимого для сопоставления с этими Ресурсы. Это стало возможным благодаря опираясь на ряд кодов и основанные на протоколе соглашения, которые делают Active Resource легко вывести сложные отношения и структуры. Эти соглашения изложены в подробно в документации для ActiveResource :: Base.

Обзор

Классы моделей отображаются на удаленные ресурсы REST Active Ресурс во многом такой же активный Запись отображает классы моделей в базу данных столы. Когда запрос сделан к удаленный ресурс, запрос REST XML генерируется, передается и результат получил и сериализовал в юзабилити Рубиновый объект.

Конфигурация и использование

Активация Ресурс для использования очень похож на Активная запись. Это так просто, как создание модельного класса, который наследует из ActiveResource :: Base и предоставив ему переменную класса сайта:

class Person < ActiveResource::Base  
  self.site = "http://api.people.com:3000/" 
end 

Сейчас класс Person включен REST и может вызывать службы REST очень аналогично тому, как активная запись вызывает методы жизненного цикла, которые работают против постоянного магазина.

# Find a person with id = 1 
ryan = Person.find(1) 
Person.exists?(1)  # => true 

Как видите, методы очень похоже на Active Records методы работы с базой данных записей. Но вместо того, чтобы иметь дело непосредственно с записью в базе данных, вы имеете дело с HTTP-ресурсами (которая может быть или не быть базой данных записи).

Подробнее здесь ...

7 голосов
/ 28 сентября 2014

Если вы решили не использовать клиентскую библиотеку HTTP, такую ​​как Farady или HTTParty, вы можете использовать open-uri, чтобы получить данные с нужной конечной точки и проанализировать их с помощью JSON.

Требования: open-URI и JSON

В контроллере:

@people = JSON.parse(open("http://api.people.com:3000/people").read, symbolize_names: true)

В поле зрения:

<% @people.each do |person| %>
    Name:<%= person[:name] %>
    Age:<%= person[:age] %>
<% end %>
4 голосов
/ 22 марта 2011

Да, это может быть хороший дизайн.

Мой совет прочитать «Сервисно-ориентированное проектирование с Ruby And Rails»: http://www.amazon.com/Service-Oriented-Design-Rails-Addison-Wesley-Professional/dp/0321659368

Он сфокусирован на приложениях Restful Ruby, как и ваш пример, с акцентом на масштабирование и производительность. Он также исследует различные фреймворки (Rack, Sinatra, Rails) и роли, которые они хорошо выполняют.

К сожалению, я не реализовал эту стратегию сам (пока!), Поэтому не могу дать вам совет из первых рук.

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