Web service z użyciem REST

Witam

Dopiero zaczynam swoją przygodę z RoR. Nie wiem jak stworzyć prosty web service wykorzystując rest.

Dokładniej opisując mój problem, mam aplikację napisaną w ror ( stworzona kiedyś tam ) teraz murze do niej dopisać web servis z którym będę łączył się z aplikacji mobilnych i pobierał dane, ale nie wiem jak się do tego zabrać.

Do rzeczy prosił bym o jakiś prosty tutorial albo link jak stworzyć bardo prosty ws realizujący np jakaś prostą metodę np : dodaj(a, b){ return a+b}
oraz jak napisać jakiś przykładowy prosty test sprawdzający jej działanie

proszę o jakieś w miare dokładne wytłumaczenie co i jak krok po kroku ważne żeby nie był to SOAP tylko REST

Z resztą jakoś będę walczył później i myślę że jakoś damy rade ale nie wiem jak zacząć.

z góry dzięki za pomoc.

Przeczytaj http://guides.rubyonrails.org/routing.html (ewentualnie zmień tylko wersje guida). To jest właśnie rest. A jak chcesz zrobić to dla urządzeń mobilnych, to przydałoby się zamiast renderować htmla, zwracać jsona. Ale to jest kolejny krok po tym jak już zrozumiesz rest.

Po dniu walki udało stworzyć się takiego małego potworka. Może nie jest doskonały i na pewno można to zrobić lepiej ale co ważne spełnia założenia i działa

Mały tutorial:

Ruby 1.9.3
Rails 4.0.0

  1. tworzymy nowy projekt
> rails new Projekt
  1. tworzymy jakiś kontroler
> rails generate controller Testowy

tworzymy sobie odpowiednie metody u mnie wygląda to tak :

app/controllers/testowy_controller.rb

[code=ruby]class TestowyController < ApplicationController

#definiujemy dla jakich akcji będziemy wymagali logowania
http_basic_authenticate_with name: “admin”, password: “pass”, :only =>[:dodaj]
#możliwe formaty odpowiedzi
respond_to :json,:html,:xml

def index
#przykładowe dane
@tab = [“a”=>1,“b”=> 2,“c”=> “3”]
self.res
end

nasza metoda realizująca dodawanie

def dodaj
@tab = params[:a]+params[:b]
self.res
end

#może nie najlepszy ale działający sposób generowania odpowiedzi na podstawie nagłówka zapytania
def res
@typ = request.content_type #response.headers[“Content-Type”] || ‘text/html’
if request.content_type == ‘application/json’
render json: @tab
elsif request.content_type == ‘application/xml’
render xml: @tab
else
respond_with(@tab)
end
end[/code]
Jeszcze tylko edytujemy plik
config/routes.rb

resources :testowy do collection do post 'dodaj' end end
odpalamy z konsoli

> rake routes

i odpalamy serwer

w przegladarce odpalamy http://127.0.0.1:3000/testowy.json // wywoła sie metoda index

aby przetestowac dodawanie w kosoli

[code]> curl -H “Content-Type:application/json” -X POST -d ‘{“a”:3,“b”:9}’ ‘http://localhost:3000/testowy/dodaj’ -u “admin:pass”

12[/code]

  1. Nie używaj polskich nazw tylko angielskie (nazwy metod, kontrolerów, zmiennych)
  2. Skoro REST to nie do ‘dodaj’ tylko ‘create’ (poczytaj co robi resources w routes.rb)
  3. Zamiast testować curlem poczytaj o testach kontrolerów. Jest znacznie łatwiej.
  4. Zamiast ręcznie sprawdzać content_type użyj kombinacji respond_to i respond_with (tutek: http://asciicasts.com/episodes/224-controllers-in-rails-3