1) Uno degli errori nel progettare servizi REST è l'abuso delle POST.
In generale infatti, è raccomandabile l'uso dei 4 metodi HTTP; nello
specifico, la convenzione è utilizzare il POST per ogni funzione che
comporta la creazione di una URI (e quindi di una risorsa) e una PUT
per ogni update di quella risorsa. Il protocollo Qspace si basa solo
su GET e POST; in questa maniera non si permette alle web caches di
lavorare (POST è un metodo non idempotente, mentre PUT si (credo)).
2) in molti casi non è specificato il mapping chiamata - Status code
di risposta. REST infatti utilizza i codici di risposta HTTP come
parte integrante del protocollo, e quindi, per fare un esempio
banalissimo, se chiamo /motes/SENSOR1 e il sensore riferito non
esiste, uno potrebbe ritornare un 404 NotFound.
3) Nella registrazione del mote, cosa torna Quadraspace Server?
Dovrebbe tornare una stringa con l'id assegnato al Mote, nevvero?
Sto mettendo su un inizio dei test di integrazione del Quadraspace
Server: questo ci permette, lavorando in maniera prettamente Agile, di
far seguire alla specifica documentale un immediato insieme di casi di
test :: chiamata + payload ---> risposta.
I test di integrazione tirano su un intero QuadraspaceServer onthe-fly
(grazie alle caratteristiche di embeddability di Glassfish) e testano
le interfacce REST live, con tutto lo stack j2ee appresso.
I test sono solo abbozzati, nel package test.integration, al momento
sto lavorando solo alla registrazione dei Mote; sarebbe carino che
mano mano che si freezano gli xml venissero scritti schemas e test di
integrazione; che ne dite?
Keep on QuadraSpacing
-Emanuele
(ma non stavamo scrivendo in inglese?)
2009/5/5 Emanuele Di Saverio <emanuele....@gmail.com>:
>
> Salve ragazzi,
> mi sono letto un pò di materiale su REST oggi e volevo condividere con
> voi alcuni concetti calati nella realtà di QuadraSpace:
>
> 1) Uno degli errori nel progettare servizi REST è l'abuso delle POST.
> In generale infatti, è raccomandabile l'uso dei 4 metodi HTTP; nello
> specifico, la convenzione è utilizzare il POST per ogni funzione che
> comporta la creazione di una URI (e quindi di una risorsa) e una PUT
> per ogni update di quella risorsa. Il protocollo Qspace si basa solo
> su GET e POST; in questa maniera non si permette alle web caches di
> lavorare (POST è un metodo non idempotente, mentre PUT si (credo)).
Quanto hai scritto e' vero: REST prevede l'utilizzo di (quasi) tutti i
metodi di HTTP per le azioni sugli oggetti. Il motivo per cui ho
limitato a GET e POST la specifica attuale puo' sembrare
stupido/sbagliato ma e' estremamente pratico: i mote basati su JME
(SunSPOT, Sentilla, JSTIX, TINI, nonche' i diffusissimi moduli Siemens
TC65, XT65 e Motorola serie 24) supportano solo GET e POST. In altre
parole, anziche' scrivere una specifica teoricamente corretta ma poi
non adatta alla maggior parte dell'hardware esistente, ho pensato
fosse meglio prendersi qualche liberta' sulla specifica (comunque
minima, mi sembra) ma poterla implementare "senza se e senza ma" su
cio' che abbiamo a disposizione.
> 2) in molti casi non è specificato il mapping chiamata - Status code
> di risposta. REST infatti utilizza i codici di risposta HTTP come
> parte integrante del protocollo, e quindi, per fare un esempio
> banalissimo, se chiamo /motes/SENSOR1 e il sensore riferito non
> esiste, uno potrebbe ritornare un 404 NotFound.
Ora e' implicito ma e' giusto che sia esplicitato, anzi lo includero'
nel prossimo draft. Anche la registrazione di un mote ha il suo
response code (201 - Created).
> 3) Nella registrazione del mote, cosa torna Quadraspace Server?
> Dovrebbe tornare una stringa con l'id assegnato al Mote, nevvero?
Tutta la parte di response e' attualmente "in digestione". :-) Una
possibilita' potrebbe essere questa di restituire il root element del
mote appena registrato con il solo ID:
<mote id="ID_CREATO_DAL_SERVER"/>
> Sto mettendo su un inizio dei test di integrazione del Quadraspace
> Server: questo ci permette, lavorando in maniera prettamente Agile, di
> far seguire alla specifica documentale un immediato insieme di casi di
> test :: chiamata + payload ---> risposta.
Ottimo!
> I test di integrazione tirano su un intero QuadraspaceServer onthe-fly
> (grazie alle caratteristiche di embeddability di Glassfish) e testano
> le interfacce REST live, con tutto lo stack j2ee appresso.
>
> I test sono solo abbozzati, nel package test.integration, al momento
> sto lavorando solo alla registrazione dei Mote; sarebbe carino che
> mano mano che si freezano gli xml venissero scritti schemas e test di
> integrazione; che ne dite?
Antonio si e' offerto di tenere allineati gli schema, sentiamo cosa ci dice lui.
> Keep on QuadraSpacing
QuadraKeeping! :-D :-D :-D
Ciao,
Ste.
--
Stefano Sanna - gerd...@tiscali.it
Personal web site: http://www.gerdavax.it
AIM: gerdavax - Skype: gerdavax - Callsign: IS0DZE
I think you're doing a good work! :-)
I agree with the adoption of an Agile methodology and to "code a little
- test a little" philosophy :-)
Go ahead with all that test beds and when the XML will be freezed we can
write down, validate and test the schemas together, if you want.
A question: are you using an IDE? Are you using Maven?
Let me know!
Ciao,
Antonio
--
Antonio Pintus
Email: pin...@gmail.com
Home Page: http://www.pintux.it
BLOG: http://jaranto.blogspot.com
My photos: http://www.flickr.com/photos/pintux/
C'e' solo un modo di dimenticare il tempo: impiegarlo.
(Charles Baudelaire)
Yes, the server project uses Maven and plain JUnit to test even
integration (e.g. no httpunit, selenium or rare beasts).
You can checkout it from http://code.google.com/p/quadraspace-server/,
you should be one the
project admins.
-Emanuele
I was able to successful import the quadraspace-server (using google
code SVN) in NetBeans 6.5.1 (be patient Emanuele but eclipse is not my
favourite IDE ;-) )
and build and test with Maven2 are OK!
Well done Emanuele!
Ciao,
Antonio
Emanuele Di Saverio ha scritto:
Hi,
I think this is a good idea and I'm sure that designing QS to be
strictly RESTful will be our "ROI" in future.
Ciao,
Antonio
..haven't been following the whole converstation but basically that
should be it. :)
cheers,
r.