Screencast: Versionierung von REST APIs

APIs sollten konsistent sein. Dies ist allerdings schwer zu bewerkstelligen wenn verschiedene Formate unterstützt werden und/oder die APIs sich weiterentwickeln. In diesem Screencast zeigt Ryan wie eine API-Versionierung über die URL oder HTPP-Header realisiert werden können.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

terminal

[bash]
rails g migration change_products_released_on
rake db:migrate
cp -R app/controllers/api/v1 app/controllers/api/v2
curl -H ‚Accept: application/vnd.example.v1‘ http://localhost:3000/api/products
[/bash]

routes.rb

[ruby]
require ‚api_constraints‘

Store::Application.routes.draw do
namespace :api, defaults: {format: ‚json‘} do
scope module: :v1, constraints: ApiConstraints.new(version: 1) do
resources :products
end
scope module: :v2, constraints: ApiConstraints.new(version: 2, default: true) do
resources :products
end
end

resources :products
root to: ‚products#index‘
end
[/ruby]

lib/api_constraints.rb

[ruby]
class ApiConstraints
def initialize(options)
@version = options[:version]
@default = options[:default]
end

def matches?(req)
@default || req.headers[‚Accept‘].include?("application/vnd.example.v#{@version}")
end
end
[/ruby]

app/controllers/api/v1/products_controller.rb

[ruby]
module Api
module V1
class ProductsController < ApplicationController
class Product < ::Product
# Note: this does not take into consideration the create/update actions for changing released_on
def as_json(options = {})
super.merge(released_on: released_at.to_date)
end
end

respond_to :json

def index
respond_with Product.all
end

def show
respond_with Product.find(params[:id])
end

def create
respond_with Product.create(params[:product])
end

def update
respond_with Product.update(params[:id], params[:product])
end

def destroy
respond_with Product.destroy(params[:id])
end
end
end
end
[/ruby]

Screencast: Pretty URLs mit FriendlyId

Benutzerfreundliche URLs erleichtert z.B. Besuchern sprechende Bookmarks zu erstellen oder Optimierungen bzgl. SEO durchzuführen. Das Plugin friendly_id erfüllt die Erstellung von Pretty URLs und bringt zusätzlich noch weitere Features mit. Ryan zeigt wie es installiert und eingesetzt werden kann.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

terminal

[bash]
rails g migration add_slug_to_articles slug:string
rake db:migrate
rails c
rails g friendly_id
[/bash]

rails console

[ruby]
Article.find_each(&:save)
[/ruby]

db/migrate/add_slug_to_articles.rb

[ruby]
add_column :articles, :slug, :string
add_index :articles, :slug
[/ruby]

models/article.rb

[ruby]
class Article < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: :slugged

def should_generate_new_friendly_id?
new_record?
end
end

# Or…

class Article < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: :history
end
[/ruby]

Rails 3 Cheatsheet

Gregg Pollack von EnvyLabs hat ein Cheatsheet für Rails 3 Entwickler veröffentlicht. Es sollte ursprünglich früher erscheinen, aber die Arbeiten an seinen letzten Screencasts haben unerwartet mehr Zeit beansprucht. Auch wenn Rails 3 nun bereits seit einiger Zeit verfügbar ist, ist das Cheatsheet eine gute Quelle um das eine oder andere nachzuschlagen.

Es ist ein umfangreiches Cheatsheet geworden, dass sehr viele Bereiche abdeckt und somit auch für erfahrene Entwickler wertvoll/hilfreich sein wird.

Das PDF ist in sechs Haupt-Bereiche aufgeteilt und jeder Bereich ist in sich nochmal gegliedert:

  1. Routing:
    • Basic Routing
    • Optionale Parameter
    • Redirection
    • Named Routes
    • Rack Routing
    • Constraints
    • Legacy Route
    • Scope
  2. Bundler
    • Bundler Commands
    • Gemfile Syntax
    • Workflow
  3. ActiveRelation
    • Lazy Loading
    • CRUD Methods
    • Chain Methods
    • Chaining
    • (Named) Scopes
    • Deprecated
  4. XSS Protection & UJS
    • XSS Protection
    • Unobtrusive JavaScript
    • HTML5 Custom Data Attributes
    • Deprecated
    • Using JQuery
  5. ActionMailer & ActionController
    • Rails Mail Generator
    • Basic Mailer Syntax
    • Delivering Messages
    • Defaults and Attachements
    • Respond_To and Respond_With
  6. ActiveModel
    • Dirty
    • Validations
    • Serialization
    • Callbacks

Neben dem Umfang hat Gregg auch viel Wert auf das Layout gelegt.

Das Rails 3 Cheatsheet kann unter folgender URL runtergeladen werden: http://blog.envylabs.com/Rails_3_Cheat_Sheets.pdf

Der entsprechende Blogpost mit weiteren Details ist unter folgender Adresse erreichbar: http://blog.envylabs.com/2010/12/rails-3-cheat-sheets/

Dann bleibt uns nur noch übrig euch viel Spaß beim cheaten zu wünschen 🙂

Screencast: Routing in Rails 3 Teil 2

In dieser Woche gibt es noch mehr Infos und Details zu Routen in Rails 3. In diesem Screencast erklärt Ryan die Mapper Klasse.

 

Download:

Download(38.6 MB, 13:25)
Alternativer Download für iPod & Apple TV(32.7 MB, 13:25)

 

Resourcen:

 

Quellcode:

[ruby]
# routes.rb
match ‚products‘ => redirect("/items")
get ‚products/recent‘
resources :products do
collection do
get :discounted
end
end
controller :products do
match # …
end
[/ruby]

Screencast: Routing in Rails 3

Diese Woche zeigt Ryan wie Routen in Rails 3 funktionieren und wie sie aufgebaut sind.

 

Download:

Download(39.7 MB, 13:22)
Alternativer Download für iPod & Apple TV(32.9 MB, 13:22)

 

Resourcen:

 

Quellcode:

[bash]
git clone git://github.com/rails/rails.git
git checkout v3.0.0
[/bash]

[ruby]
match ‚products‘, :to => ‚products#index‘
# same as
match ‚products‘, :to => ProductsController.action("index")

match ‚products/recent‘
# same as
match ‚products/recent‘, :to =>’products#recent‘, :as => ‚products_recent‘
[/ruby]

Screencast: Rails 3 mit Rack

Rack ist die neue Middleware, die in Version 3 einzug in Rails gefunden hat. Mit der Hilfe Rack können Rails-Applikationen neben z.B. Filter, Caches auch um andere Web-Applikationen erweitert bzw. ergänzt werden. Ryan zeigt diese Woche wie Sinatra für Redirects etc. eingesetzt werden kann.

 

Download:

Download(12.1 MB, 8:48)
Alternativer Download für iPod & Apple TV(12 MB, 8:48)

 

Resourcen:

 

Quellcode:

[ruby]
# routes.rb
root :to => "home#index"
root :to => HomeController.action(:index)
root :to => HomeApp

match "/about" => redirect("/aboutus")
match "/aboutus" => "info#about"

resources :products
match "/p/:id" => redirect("/products/%{id}")

match "/processes" => ProcessesApp.action(:index)

# Gemfile
gem "sinatra"

# lib/home_app.rb
class HomeApp < Sinatra::Base
get "/" do
"Hello from Sinatra!"
end
end

# lib/processes_app.rb
class ProcessesApp < ActionController::Metal
include ActionController::Rendering

append_view_path "#{Rails.root}/app/views"

def index
@processes = `ps -axcr -o "pid,pcpu,pmem,time,comm"`
render
end
end
[/ruby]

[html]
<!– app/views/processes_app/index.html.erb –>
<h1>Processes</h1>
<pre><%= @processes %></pre>
[/html]

Screencast: Subdomains in Rails 3

Seit Rails 3 ist es nun möglich Subdomains ohne zusätzliche Plugins zu benutzen bzw. einzusetzen. Ryan zeigt diese Woche wie.

 

Download:

Download(18.8 MB, 13:55)
Alternativer Download für iPod & Apple TV(18.5 MB, 13:55)

 

Resourcen:

 

Quellcode:

[ruby]
# routes.rb
constraints(Subdomain) do
match ‚/‘ => ‚blogs#show‘
end

# lib/subdomain.rb
class Subdomain
def self.matches?(request)
request.subdomain.present? && request.subdomain != "www"
end
end

# app/helpers/url_helper.rb
module UrlHelper
def with_subdomain(subdomain)
subdomain = (subdomain || "")
subdomain += "." unless subdomain.empty?
[subdomain, request.domain, request.port_string].join
end

def url_for(options = nil)
if options.kind_of?(Hash) && options.has_key?(:subdomain)
options[:host] = with_subdomain(options.delete(:subdomain))
end
super
end
end

# application_controller.rb
include UrlHelper

# config/initializers/session_store.rb
# requires Rails 3.0 RC or head
Rails.application.config.session_store :cookie_store, :key => ‚_blogs_session‘, :domain => :all

# change top level domain size
request.domain(2)
request.subdomain(2)
Rails.application.config.session_store :cookie_store, :key => ‚_blogs_session‘, :domain => "example.co.uk"
[/ruby]

[html]
<!– blogs/index.html.erb –>
<%= link_to blog.name, root_url(:subdomain => blog.subdomain) %>

<!– blogs/show.html.erb –>
<%= link_to "All Blogs", root_url(:subdomain => false) %>
[/html]

Screencast: Routes in Rails 3

In Rails 3 wurde das Routing angepasst und in mancher Hinsicht vereinfacht. Ryan zeigt in dieser Woche wie bestehende Routen auf das neue Schema angepasst werden können, und was die neuen Features sind.

 

Download:

Download (30.2 MB, 13:31)
Alternativer Download für iPod & Apple TV (19 MB, 13:31)

 

Resourcen:

 

Quellcode:

[bash]
rails detour
mate detour
rails g controller info about
rails s
[/bash]

[ruby]
Detour::Application.routes.draw do |map|
# map.resources :products, :member => { :detailed => :get }
resources :products do
get :detailed, :on => :member
end

# map.resources :forums, :collection => { :sortable => :get, :sort => :put } do |forums|
# forums.resources :topics
# end
resources :forums do
collection do
get :sortable
put :sort
end
resources :topics
end

# map.root :controller => "home", :action => "index"
root :to => "home#index"

# map.about "/about", :controller => "info", :action => "about"
match "/about(.:format)" => "info#about", :as => :about

match "/:year(/:month(/:day))" => "info#about", :constraints => { :year => /d{4}/, :month => /d{2}/, :day => /d{2}/ }

match "/secret" => "info#about", :constraints => { :user_agent => /Firefox/ }

constraints :host => /localhost/ do
match "/secret" => "info#about"
end

match "/hello" => proc { |env| [200, {}, "Hello Rack!"] }
end
[/ruby]

[html]
<!– info/about.html.erb –>
<%= debug params %>
[/html]

Artikel zu Rails 3

Rails 3 steht vor der Tür und wird jede Menge Neuerungen mitbringen. Maxim C. hat eine Liste mit Links von interessanten Artikeln und Anleitungen zusammengestellt um sich mit dem kommenden Release anzufreunden. Weitere Vorschläge und Empfehlungen sind willkommen.

Die Liste ist in die verschiedenen Bereiche des Frameworks aufgeteilt und chronologisch sortiert.

Router

ActiveRecord

Controller

Generatoren

Rails 3 Applikationen laufen lassen

Auf Rails 3 aktualisieren

Plugin/Gem Kompatiblität

Architektur

Professional Ruby Series, CD-ROM Mongrel, Routing, RESTful, Plugins, and Rubyisms

Rails Routing focuses on the extensive and powerful routing subsystem in Rails–the suite of techniques for manipulating the process by which incoming requests to a Rails application can be matched with, or mapped to, specific actions. Rails Refactoring to Resources. If you’re new to Representational State Transfer (REST), this Short Cut will help you decide which parts of the REST paradigm you want to introduce to your application. If you’re a developer with more RESTful experience, it will introduce you to some refactorings that will give your application a cleaner, leaner code base. Rubyisms in Rails is an examination of how the style of Ruby informs the design of Rails.

In particular, it looks at a few specific examples of how Rails‘ internal code is implemented in Ruby to instruct about Ruby’s design principles. Rails Plugins teaches you what plugins are, how they work, and why they’re useful. Discover how to find and install plugins using the provided script, then explore the world of plugin development, including common plugin idioms, testing, and version control. Finally, learn how to share your own plugins. Mongrel introduces the fast, versatile Ruby Web server.If you build or manage Web applications, this will be a useful reference as you set up and use Mongrel in your development and production environments.

Also teaches how to extend Mongrel.

  • Taschenbuch: 192 Seiten
  • Verlag: (2007-08-05 )
  • Preis: 25.59 €
  • Sprache: english
  • ISBN-10: 0132417995
  • Autor(en): Dave Thomas, David A. Black
  • kaufen