2009-11-11 5 views
3

Je prévois d'utiliser Sinatra pour un nouveau petit service Web (WS) que je dois mettre en place pour un client. Le WS n'aura que deux méthodes, l'une accessible via GET et l'autre via POST. Pour la méthode POST, le client enverra un paquet XML à sinatra WS qui analysera les données et émettra une réponse HTTP 200 OK ou un code d'erreur 40x.Comment gérer POSTed XML via l'application Sinatra Ruby

Ma question est comment puis-je analyser le paquet XML POSTed entrant dans Sinatra?

Voici un exemple de ce que le paquet de données entrant ressemblera:

<?xml version="1.0" encoding="utf-8" ?> 
<Counts> 
    <OccupiedCount>300</OccupiedCount> 
    <ReservedCount>40</ReservedCount> 
    <VacantCount>160</VacantCount> 
    <TotalCount>500</TotalCount> 
    <Checksum>0777d5c17d4066b82ab86dff8a46af6f</Checksum> 
    <Timestamp>2009-11-21T14:06:19Z</Timestamp> 
    <ApiKey>1234567890qwerty</ApiKey> 
</Counts> 

est-il someway pour accéder au paquet de données via l'objet du Sinatra pour que je puisse l'analyser avec quelque chose comme Crack XML? Ou ai-je besoin d'utiliser une sorte de variable Rack pour obtenir le paquet de données XML entier qui a été POSTé sur mon WS?

+0

Voir http://www.sinatrarb.com/intro pour une bonne guide pour traiter les demandes dans Sinatra, et en particulier http://www.sinatrarb.com/intro#Accessing%20the%20Request%20Object –

+0

Merci pour le c omment. Cette question a été posée en 2009 dans les premiers jours de Sinatra – cpjolicoeur

+0

Ah, je ne l'ai pas vu quand je suis venu ici d'une question connexe. –

Répondre

0

app sinatra

require 'rubygems' 
require 'sinatra' 

post '/form' do 
    puts params[:xml] 
end 

Publier une demande à l'aide de vos données:

curl -d "xml=<?xml version="1.0" encoding="utf-8" ?> 
<Counts> 
    <OccupiedCount>300</OccupiedCount> 
    <ReservedCount>40</ReservedCount> 
    <VacantCount>160</VacantCount> 
    <TotalCount>500</TotalCount> 
    <Checksum>0777d5c17d4066b82ab86dff8a46af6f</Checksum> 
    <Timestamp>2009-11-21T14:06:19Z</Timestamp> 
    <ApiKey>1234567890qwerty</ApiKey> 
</Counts> 
" http://localhost:4567/form 

Résultat:

- - [11/Nov/2009:12:05:40 PST] "POST /form HTTP/1.1" 200 0 
- -> /form 
<?xml version=1.0 encoding=utf-8 ?> 
<Counts> 
    <OccupiedCount>300</OccupiedCount> 
    <ReservedCount>40</ReservedCount> 
    <VacantCount>160</VacantCount> 
    <TotalCount>500</TotalCount> 
    <Checksum>0777d5c17d4066b82ab86dff8a46af6f</Checksum> 
    <Timestamp>2009-11-21T14:06:19Z</Timestamp> 
    <ApiKey>1234567890qwerty</ApiKey> 
</Counts> 
+0

Je ne sais pas pourquoi les données XML sont brouillées, mais cela fonctionne certainement sur ma machine – GDR

+0

les données ne viennent pas en XML = param cependant. c'est juste le paquet de données entier, pas un paquet qui commence par "XML = " donc params [: xml] n'existe pas dans ce cas – cpjolicoeur

+0

il ne semble pas que request.body fonctionne comme si ce n'était pas un objet chaîne, et request.POST est un hachage, pas l'objet entier – cpjolicoeur

Questions connexes