[:koshtech] [:blog]

Criando uma simples RESTful API usando Rails 3 e JSON
O exemplo de API utilizando JSON que vou fazer aqui é bem simples. Alguns podem se perguntar "Por que ele não faz com XML?", e eu respondo, você está no post errado, a busca certa no Sr. Google é "API XML Rails", ou algo parecido com isso. Criei esse post por que precisei fazer uns testes de criação de API, tanto para o meu trabalho, quanto para a faculdade, então compartilho minha experiência com vocês. As referências que utilizei para fazer o meu exemplo estão abaixo. Utilizei JRuby e PostgreSQL para essa aplicação, coloque o banco e ruby que quiser, se não estiver usando JRuby não copie "jruby -S". Crie uma aplicação rails jruby -S rails new zapi_blog -d postgresql Verifique se o seu Gemfile está parecido com esse aqui: source 'http://rubygems.org' gem 'rails', '3.1.3' # Bundle edge Rails instead: 
# gem 'rails', :git => 'git://github.com/rails/rails.git' gem 'activerecord-jdbcpostgresql-adapter' gem 'jruby-openssl' 
gem 'json' 
gem 'pg' 
gem 'execjs' 
gem 'therubyrhino' 
gem 'rack-cache', :require => 'rack/cache' # Gems used only for assets and not required 
# in production environments by default. 
group :assets do 
gem 'uglifier', '>= 1.0.3' 
end gem 'jquery-rails' Crie um scaffold Post jruby -s rails g scaffold Post title:string body:text Crie e rode as migrações criadas no banco. Vamos ao controller para modificar algumas coisas, prefiro ele bem simplificado, mudo de lugar o "respond_to" que o rails gera e coloco de uma forma mais elegante utilizando "respond_with". respond_to :html, :json # GET /posts 
# GET /posts.json 
def index 
@posts = Post.all respond_with @posts 
end Inicie sua app e entre em "/posts.json" e abra uma outra aba com "/posts", elas contém o mesmo resultado, só que mostram de formas diferentes. O Rails facilita muito a vida de quem quer criar uma app, de uma forma bem simples é possível injetar os posts de fora da aplicação. Utilizando o "curl", pode ser feito um teste bem simples. curl -d 'post[title]=Post1&post[body]=Post1' http://localhost:3000/posts.json Nesse teste consigo injetar um post utilizando a URL do "/posts.json". Vou criar um script com ruby para criar os posts, o script irá pegar os dados de um banco de dados já criado e populado, através de JSON irá enviar os posts para a aplicação que está rodando no servidor local. Criei os diretórios "rest_api/lib", coloquei dois aquivoes "api.rb" e "post.rb". rest_api/lib/post.rb class Post < ActiveRecord::Base 
end rest_api/lib/api.rb require 'rubygems' 
require 'active_record' 
require 'json' 
require 'net/http' 
require 'uri' ActiveRecord::Base.establish_connection( 
:adapter => "postgresql", 
:host => "localhost", 
:username => "oquevoceusar", 
:password => "suasenhaaquiounao", 
:database => "umbancodedadosqualquer" 
) require 'post' class Api 
host = 'localhost:3000' 
uri = URI.parse(url) 
post_ws = '/posts.json' posts = Post.all 
posts.each do |p| 
post = {'title' => p.title, 'body' => p.body}.to_json 
req = Net::HTTP::Post.new(post_ws, initheader = {'Content-Type' => 'application/json'}) 
req.body = post 
response = Net::HTTP.new(uri.host, uri.port).start {|http| http.request(req)} 
puts "Response #{response.code} #{response.message}: #{response.body}" 
end 
end É possível também passar parametros de usuário e senha, entre outras coisas de segurança por esse script e fazer a verificação na app, mas isso é um outro post. Não vou explicar em detalhes o que esse script faz, se você está olhando esse post é por que já tem uma noção boa de ruby on rails, então vá tirar suas dúvidas na API do Ruby ou do Rails, o Sr. Google também ajuda. Referências: 
Por Vagner Zampieri
27/03/2014, 09:00 h
2 Comentários

Veja também


FACEBOOK

> Visite, curta, siga

TWITTER

> Siga

GOOGLE +

> Adicione aos seus circulos

koshtech.com

[:koshtech] Rio de Janeiro
Rua Bastos de Oliveira, 139 parte
Oswaldo Cruz - RJ

Telefone: 55 21 3936-5322 / 24 981-361-642

koshtech.com © 1997-2017

 

Tecnologia [:batepronto] © 2012-2017 by [:koshtech] · Política de Privacidade · Termos de Uso