Desenvolvendo APIs usando Rails - Guru SC 2012

31
Construíndo APIs usando Rails Rafael Felix

description

My talk at the GuruSC (Santa Catarina's ruby user group) 2012

Transcript of Desenvolvendo APIs usando Rails - Guru SC 2012

Page 1: Desenvolvendo APIs usando Rails - Guru SC 2012

Construíndo APIs usando Rails

Rafael Felix

Page 2: Desenvolvendo APIs usando Rails - Guru SC 2012

Rafael quem?

Page 3: Desenvolvendo APIs usando Rails - Guru SC 2012

Rafael FelixSoftware Developer

Rafael quem?

Page 4: Desenvolvendo APIs usando Rails - Guru SC 2012

Aplicação Servidor Externo

Page 5: Desenvolvendo APIs usando Rails - Guru SC 2012

Aplicação Servidor Externo

XML

WS - SOAP

Page 6: Desenvolvendo APIs usando Rails - Guru SC 2012

Aplicação Servidor Externo

Page 7: Desenvolvendo APIs usando Rails - Guru SC 2012

Aplicação Servidor Externo

app-servidor

Page 8: Desenvolvendo APIs usando Rails - Guru SC 2012

Aplicação Servidor Externo

app-servidor

JSON RESTfull

XMLWS - SOAP

Page 9: Desenvolvendo APIs usando Rails - Guru SC 2012

Aplicação Servidor Externo

app-servidor

JSON RESTfull

XMLWS - SOAP

Cliente

Page 10: Desenvolvendo APIs usando Rails - Guru SC 2012

Aplicação Servidor Externo

app-servidor

JSON RESTfull

XMLWS - SOAP

HTTPHTML

API - JSONRESTfull

Cliente

Page 11: Desenvolvendo APIs usando Rails - Guru SC 2012
Page 12: Desenvolvendo APIs usando Rails - Guru SC 2012

class XptoController < ApplicationController def show @xpto = Xpto.find params[:id] endend

resource :xpto, :only => [:show]

Page 13: Desenvolvendo APIs usando Rails - Guru SC 2012

class XptoController < ApplicationController def show @xpto = Xpto.find params[:id] respond_to do |format| format.html format.json{ render :json => @xpto } end endend

Page 14: Desenvolvendo APIs usando Rails - Guru SC 2012

class XptoController < ApplicationController def show @xpto = Xpto.find params[:id] respond_to do |format| format.html format.json{ render :json => @xpto } end endend

{ "id": 1, "text": "Foo Bar", "created_at": "2012-04-12T01:37:27Z", "updated_at": "2012-04-12T01:37:27Z"}

@xpto.to_json

Page 15: Desenvolvendo APIs usando Rails - Guru SC 2012

class XptoController < ApplicationController def show @xpto = Xpto.find params[:id] respond_to do |format| format.html format.json{ render :json => @xpto.to_json(:include => [:children]) } end endend

Page 16: Desenvolvendo APIs usando Rails - Guru SC 2012

class XptoController < ApplicationController def show @xpto = Xpto.find params[:id] respond_to do |format| format.html format.json{ render :json => @xpto.to_json(:include => [:children]) } end endend

@xpto.to_json

JSON::ParserError: 756: unexpected token at

Page 17: Desenvolvendo APIs usando Rails - Guru SC 2012

E agora quem poderá nos defender?

Page 18: Desenvolvendo APIs usando Rails - Guru SC 2012

class XptoController < ApplicationController def show @xpto = Xpto.find params[:id] respond_to do |format| format.html format.json{ render :json => @xpto.to_json(:include => [:children]) } end endend

Page 19: Desenvolvendo APIs usando Rails - Guru SC 2012

class XptoController < ApplicationController def show @xpto = Xpto.find params[:id] respond_to do |format| format.html format.json{ render :json => @xpto.as_json(:include => [:children]) } end endend

Page 20: Desenvolvendo APIs usando Rails - Guru SC 2012

class XptoController < ApplicationController def show @xpto = Xpto.find params[:id] respond_to do |format| format.html format.json{ render :json => @xpto } end endend

Page 21: Desenvolvendo APIs usando Rails - Guru SC 2012

class Xpto def as_json(options={}) super(options.merge(:include => [:children])) endend

Page 22: Desenvolvendo APIs usando Rails - Guru SC 2012

class YptoController < ApplicationController respond_to :html, :json def show @xpto = Xpto.find params[:id] respond_with @xpto endend

Page 23: Desenvolvendo APIs usando Rails - Guru SC 2012
Page 25: Desenvolvendo APIs usando Rails - Guru SC 2012

app/views/xpto/show.json.rabl

object @xptochild :children do attributes :id, :name, :descriptionend

Page 26: Desenvolvendo APIs usando Rails - Guru SC 2012

app/views/ypto/show.json.rabl

object @xptochild :owner do attributes :id, :nameend

Page 28: Desenvolvendo APIs usando Rails - Guru SC 2012

json.(@xpto, :id, :text, :created_at, :updated_at)json.children @xpto.children, :id, :name, :description

app/views/xpto/show.json.jbuilder

Page 29: Desenvolvendo APIs usando Rails - Guru SC 2012

app/views/ypto/show.json.jbuilder

json.(@xpto, :id, :text, :created_at, :updated_at)json.owner do |json| json.id @xpto.owner.id json.name @xpto.owner.name json.description @xpto.owner.descriptionend

Page 30: Desenvolvendo APIs usando Rails - Guru SC 2012

class XptoController < ApplicationController respond_to :html, :json def show @xpto = Xpto.find params[:id] respond_with @xpto endend