Класс JavaScript, который действует как Activeresource для рельсов. Задание общего интерфейса для наших ресурсов на наших API среди языков, приложений и проектов.
Об авторе
Я увлечен решением проблем, фанатики о эффективности и одержимы привлечению новых идей к жизни. Я люблю решать проблемы и эффективно делать это. Я всегда ищу пути высыхания кода и придумывать новые оптимизации в следующий раз.
Другое, что следует отметить, что я являюсь разработчиком полного стека, который начал как дизайнер (и все еще один). Таким образом, мой подход обычно отличается от типичного компьютерного ученого. Моя цель, как правило, для того, чтобы сделать вещи достаточно функционально для генерации UI/UX, а затем обратно к проверке, спецификациям, индексам и т. Д. Я рисую большие удовлетворенности от быстрого прототипирования, MVPS и создания опыта приводвов данных.
Проблема
Насколько просто мы можем сделать процесс создания новых ресурсов в приложении Rails и взаимодействуя с ними в нашем приложении React/React/React – NATIONAL или другое приложение JS?
Можем ли мы сделать это простым, элегантным, легко работать, а не ограничивать?
Можем ли мы заставить нашу клиентскую сторону JavaScript чувствовать себя интуитивным для работы с нашими железнодорожными моделями ActiveRecord или Activeresource?
Если вы использовали Rails на любую продолжительность времени, вы приходите наслаждаться простотой генерации новой модели, добавив несколько отношений, создавая леса и некоторые спецификации.
Это все так чертовски легко!
Затем мы идем на сторону клиента … где мы действительно просто хотим начать взаимодействовать с нашей новой записью, установленной как с ActiveRecord. Позвольте мне все получить, найти, обновлять, уничтожить. Я хочу, чтобы мой пользовательский интерфейс оформлен и не должен проводить много времени настроить мои модели JS. Я добавлю слои, которые мне нужны, как я иду, но изначально я быстро хочу основы из коробки.
Мечта
Взаимодействуйте с моими удаленными службами более последовательно в JS и Ruby, стороне сервера и сервера. Создайте классы JS, которые чувствуют себя как сервер, эквивалентный Activeresource.
- Простая конфигурация
- Переопределения до получения атрибута
- Переопределенный Crud API
- Класс стиля OOP и методы экземпляра
Альтернатива
Я посмотрел на Реагистрационные модели , но они не дали мне совсем то, что я хотел. Существует множество других альтернатив, большинство из которых являются специфическими структурами, поэтому я хотел построить то, что можно было бы использовать в любом проекте JS.
Инструменты
- Рельсы
- Реагировать на родной
- Унаследованные ресурсы
- Activeresource.js.
Это было изначально построено внутри нативного приложения ADCT. Реагировать или реагировать натуральные не требования, но Es6 есть.
Я большой поклонник Унаследованные ресурсы , который генерирует целый интерфейс CRUD для рельсов контроллера с возможностью отмены или обезьяны. Поэтому с простыми ресурсами маршрутами, унаследованным контроллером ресурсов и классом Activeresource.js, мы можем очень быстро начать взаимодействовать с нашей новой моделью.
Цель
Мы хотим начать взаимодействовать с новой моделью рельсов из моего интерфейса приложения как можно быстрее со всеми поведением по умолчанию, просто работаю из коробки. Мы хотим, чтобы наше взаимодействие с ресурсами чувствовать себя очень похожим в Ruby и в JS. Мы хотим как можно меньше конфигурации, не отказываясь от гибкости позже.
Код
Вот несколько примеров того, как вы можете интегрировать Activeresource.js в ваш проект. Давайте использовать простой пример модели Post Blog. Мы генерируем модель и контроллер, настройте маршруты ресурсов, настройте класс ресурсов JS и немного играете с ним.
Добавьте это в Gemfile в приложении Rails:
gem 'inherited_resources'
Затем запустить Bundle Установите в консоли:
bundle install
Теперь давайте генерируем вашу модель и контроллер в приложении Rails.
rails g model Post title:string body:text rails g controller posts
Это будет генерировать контроллер, который наследует ActionController:: Base или ApplicationController. Мы собираемся захотеть обменять это для унаследованных знакомств:: Base, чтобы мы могли получить все удобные автоматические действия CRUD, которые отвечают на JSON и XML, не написав их все вручную. Если нам нужно позже, мы можем переопределить по мере необходимости.
class PostsController < InheritedResources::Base end
Контроллер так же полезен, как и маршруты к нему. Мы воспользуемся воспользоваться ресурсами Rails, чтобы одна строка генерировала наш стандартный трассы для нас.
- Индекс
- Создавать
- Новый
- Редактировать
- Показывать
- Обновлять
- Разрушать
config/marross.rb.
resources :posts
Теперь давайте попадем в клиентскую сторону. Мы проскальзываемся в другом классе, который называется Remoteservice, который не упомянул. Он включен в точку ниже, если вы хотите увидеть, что все это о том, но, короче говоря, это класс, который обеспечивает стиль рельсов для спокойных методов от маршрутов к методам HTTP с обратными вызовами.
Вам просто нужно указать на свой сервер и настроить несколько параметров по умолчанию, как API_KEY, токен или user_id, если это необходимо (что-то, что будет отправлено вместе с каждым запросом), и он готов к работе.
Создайте свой новый ресурсный класс наследования Activeresource.
import RemoteService from 'RemoteService'; import ActiveResource from 'ActiveResource'; var MyService = new RemoteService("https://myservice.com", { api_key: 'top-secret' }); export default class Post extends ActiveResource { static remote = MyService; static base_route = '/api/v1/posts'; // attribute getter overrides // zero pad all ids get id(){ return _.lpad(this.attributes.id, 8, '0'); } } Post.all((post) => { console.log(post.id); // zero padded ids }) // crud api with attr getter overrides var post = Post.create({ title: 'new' }); var post = Post.find(post.id); post.update('title','test'); post.save(); post.destroy();
Гист
https://gist.github.com/gabecoyne/da8d23d5c31be2d5aacbe6ed5b78ebd8
ДЕЛАТЬ
Теперь это может быть сделано еще больше, чтобы создать новое расширение активации Acciveresource, так что модели Server Side и Models Models обрабатывают все более последовательно. Activeresource:: Base отлично отлично выходит из коробки, но она может не справиться с наследственными ошибками.
class ApiResource < ActiveResource::Base # overrides & customizations end class Post < ApiResource # overrides & methods end
Вы также можете создать новое расширение INHEREDIEDRESOURCES:: BASE, чтобы получить все, как вы им нравятся. Тогда у вас могут быть все контроллеры API, наследуют этот новый класс. Тогда вы можете сохранить переработки этого класса, чтобы добавить глобальную функциональность.
class ApiController < InherittedResources::Base # overrides & customizations end class PostsController < ApiController # overrides & actions end