http://blog.overskrift.dk/2008/03/21/oio-gar-web-20-med-rest/
(tak til Dalager for at gøre mig opmærksom på linket)
Jeg har leget lidt med ActiveResource for at se om det kunne fungere
ud af boksen. Desværre er der et par afvigelser, som måske kunne
interessere nogle af jer. Her er hvad jeg har fundet
Sæt en model op til at konsumere postdistrikter
postdistrikt.rb:
class Postdistrikt < ActiveResource::Base
self.site = 'http://oiorest.dk/danmark/'
end
Rette /config/initializers/inflections.rb:
Inflector.inflections do |inflect|
inflect.irregular 'postdistrikt', 'postdistrikter'
end
Nu kan jeg i teorien gøre således fra konsollen
Postdistrikt.find(:all)
Postdistrikt.find(2300)
Problemet er så bare at OIO Rest interfacet udstiller url'erne uden
".xml" sat på, hvilket ActiveResource forventer.
Se her:
Postdistrikt.find(:all)
requester
http://oiorest.dk/danmark/postdistrikter.xml (response 404)
men sourcen ligger på
http://oiorest.dk/danmark/postdistrikter (response 200)
Postdistrikt.find(2300)
requester
http://oiorest.dk/danmark/postdistrikter/2300.xml (response 404)
men sourcen ligger på
http://oiorest.dk/danmark/postdistrikter/2300 (response 200)
Det store spørgsmål er så hvordan skal ActiveResource modificeres så
den kan konsumere en webservice som oiorest?
Jeg tænkte på, om man skulle kunne give flere options med (udover site
= '...' i modellen)
Har i nogle tanker, ideer?
PS:
For bedre at logge hvad der sker, har jeg desuden duck-typet denne fra
ActiveResource for at køre igennem en http sniffer
(i min environment.rb):
module ActiveResource
class Connection
# Creates new Net::HTTP instance for communication with
# remote service and resources.
def http
# tiljøjet proxyserver/http sniffer Fiddler på http://localhost:8888
http = Net::HTTP.new(@site.host, @site.port,
'localhost', 8888)
http.use_ssl = @site.is_a?(URI::HTTPS)
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl
http
end
end
end
--
___________________________________________________________
Jesper Rønn-Jensen / Capgemini Denmark
Tel. +45 3977 8220 / Mob. +45 2373 6220 / Fax +45 7011 2201
www.dk.capgemini.com / Blog http://justaddwater.dk/
jesp...@gmail.com (Private e-mail and Google Talk IM)
___________________________________________________________
Jeg har lige et tillægsspørgsmål. Hvordan adderer man en proxy server
i activeresources?
/Franke
http://code.google.com/p/oiorest/
Jeg har tilføjet dalager og mig som admins... Andre der vil have commit adgang?
/Jesper
ActiveResource defaults'ne kan gøre det endnu lettere for novicer at
integrere danmarks ws'erne mod en rails app
Dvs. sikre der også er svar på
http://oiorest.dk/danmark/postdistrikter.xml og ikke kun
http://oiorest.dk/danmark/postdistrikter
samt at der er svar på
http://oiorest.dk/danmark/postdistrikter/2300.xml og ikke kun
http://oiorest.dk/danmark/postdistrikter/2300
Christian, jeg melder mig til den workshop den 22.april. Håber at du også gør :)
/Jesper
2008/3/27 Christian Dalager <chri...@dalager.com>:
--
webservices that don't support the .xml extension added by ActiveResource as default."
Jeg har ændret danmark servicen til at acceptere url'er med .xml -
prøv det og lad mig høre om det opfylder jeres behov.
Det lyder som en god løsning. Jeg har tænkt lidt over at servicerne
returnere html når man fejler. Med vilje, undskyld men jeg vil ha min
egen by.
PUT /danmark/postdistrikter/4110 HTTP/1.1
Content-Type: application/xml
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
<div class="content-container"><fieldset>
<h2>405 - HTTP verb used to access this page is not allowed.</h2>
…
Hvis du alligevel er følsom omkring extentions kunne fejl returneres i
korrekt format også.
31/03/08 skrev Finn Jordal <FinnJ...@gmail.com>:
Hej Finn
date Sun, Apr 6, 2008 at 5:48 PM subject Re: OIO REST interface mailed-by dalager.com
Jeg sidder og roder lidt med OIOREST ruby-lib og har et designspørgsmål:
Når man laver et direkte opslag på f.eks. et skoledistrikt, er der ikke noget ref-element:
http://oiorest.dk/danmark/kommuner/390/skoledistrikter/8
Det er der ellers på listerne, og på en del af de andre entiteter er der forskellige numre, der omend navngivet lidt forskelligt giver en unik reference.
Når man skal holde styr på relationerne mellem entiteterne kunne det være praktisk at der var en ref-attribut på alle elementer, også selvom den implicit ligger i den url man finder dem fra, som i ovenstående tilfælde. Man kunne bare gøre sådan her:
<skoledistrikt ref="http://oiorest.dk/danmark/kommuner/390/skoledistrikter/8">
<navn>Iselingen Skole</navn>
<kommune ref="http://oiorest.dk/danmark/kommuner/390"/>
<adresser ref="http://oiorest.dk/danmark/kommuner/390/skoledistrikter/8/adresser"/>
</skoledistrikt>
Indtil videre har jeg et fungerende ruby-library på benene, hvor man kan kravle rundt imellem de associerede/relationsbunde type og skrive kode somk = Kommune.find_by_name('viborg').first
skoler = k.skoler
ellernordjylland = Region.find_by_name('Nordjylland').first
nordjyskeKommuner = nordjylland.kommuner
skoler = nordjylland.kommuner.collect{|k| k.skoler}.flatten ## finder 278 skoler i et array
skoler.last.navn ## => "Vrå Skole"
Så det begynder at ligne noget, man kan lave noget sjovt med -- nu skal adresserne bare puttes på.
Nå, men det var bare lige en blandet feedback og infomail.
Nu vil jeg tage på ferie :-)
/christian