Подтвердить что ты не робот

Использование API REST из Rails-приложения

Я создаю свое первое приложение 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?

Спасибо!

4b9b3361

Ответ 1

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

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

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

Обновление

Я полностью < 3 RestClient. Так просто. Если вам нужна функциональность в стиле ORM, вам понадобится абстракция более высокого уровня, но для простого использования API вы не сможете победить ее простоту. Он просто делает то, что он должен делать без суеты, имеет разумные значения по умолчанию и имеет возможность устанавливать дополнительные параметры, такие как заголовки auth.

Ответ 2

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

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

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

Философия

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

Обзор

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

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

Установка активного Ресурс для использования очень похож на Активная запись. Это так просто, как создание класса модели, который наследует из 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 методы работы с базой данных записей. Но вместо того, чтобы непосредственно с записью базы данных, youre имея дело с ресурсами HTTP (которая может быть или не быть базой данных записей).

Подробнее...

Ответ 3

Если вы решили не использовать клиентскую библиотеку 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

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

Я советую прочитать "Сервис-ориентированный дизайн с Ruby и Rails: http://www.amazon.com/Service-Oriented-Design-Rails-Addison-Wesley-Professional/dp/0321659368

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

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