2009-03-22 3 views
6

Non sto ottenendo la cosa RESTful. Sì, so come inviare una richiesta GET alla mia app dal mio browser. È attraverso il collegamento URL.Come si invia qualcosa accanto a GET e POST dal browser all'app RESTful?

<a href="/user/someone"> 

E può anche inviare richieste POST tramite metodo di modulo.

<form method="post"> 

Oltre che conosco i browser a volte inviare il comando HEAD di capire lo stato di pagina, ma su cui l'utente finale non ha alcun controllo.

Quindi quali sono i comandi DELETE e PUT di cui sto leggendo? Come si invia, ad esempio, un comando DELETE dal browser all'applicazione RESTful?

risposta

5

L'HTML 4.01 specification descrive solo GET e POST come valid values for the method attribute. Quindi, in HTML non c'è modo di descrivere altri metodi di questo ormai.

Ma la (attualmente solo una bozza di lavoro) HTML 5 specification fa nome PUT e DELETE come valid values.

Dando uno sguardo alla (attualmente solo una bozza di lavoro troppo) XMLHttpRequest object specification usato per richieste asincrone in JavaScript (AJAX), it supports the PUT and DELETE methods anche, ma non dice nulla circa il supporto reale da parte dei browser attuali.

+0

Vedi http://stackoverflow.com/questions/ 165779 per informazioni sul supporto del browser. – Chuck

+0

l'ultima volta che ho provato http://www.mail-archive.com/[email protected]/msg00336.html non c'era abbastanza supporto per costruire client web-dav di ajax. Ma ho fatto cambiare le specifiche in modo che gli agenti dovessero supportare i metodi di sicurezza comuni. –

2

Ho sentito che DELETE e PUT non sono completamente supportati in tutti i browser (non l'ho controllato). Rails sta facendo un workaround - sta inviando POST con un campo nascosto contenente un metodo reale. Quindi utilizza solo GET e POST e sul server legge questo campo nascosto e reagisce.

1

Le applicazioni basate su Flash (o Flex) possono funzionare su livelli inferiori, come le prese aperte. Possono anche fare PUT/DELETE (anche se Flex in particolare è noto per avere problemi con le intestazioni http. Quindi suppongo che stia dicendo che dipende dalla tecnologia del client. In particolare, potresti incorporare un piccolo oggetto flash che farebbe il comunicazione per voi se il vostro browser non supporta (o non si vuole implementare il supporto cross-browser).

3

Per simulare PUT e DELETE, framework come Rails invece costruiscono le forme come questo:

<form action="https://stackoverflow.com/users/1/delete" method="post"> 
    <input type="hidden" name="_method" value="delete" /> 
    <input type="submit" value="Delete user 1" /> 
</form> 

Questo è in realtà una forma POST, ma usando il nascosto _method input per dire al server quale metodo è stato realmente destinato. Potresti implementare questo supporto anche su qualsiasi altro framework web.

2

Un POST non deve passare attraverso un modulo. Il modo migliore per conoscere questo, e anche GET, PUT e DELETE è quello di utilizzare un client ReST per fare le richieste HTTP e vedere le risposte. Vi consiglio di scaricare il client python nifty da http://restclient.org/

Un browser non è (come al momento) il miglior strumento da utilizzare mentre vi state familiarizzando con ReST. Un client come quello sopra ti permetterà di "vedere" le tue richieste e risposte HTTP.

3

@C Moran ha ragione: se vuoi essere veramente RESTful, un browser non è un client ideale, a causa in parte della mancanza dei metodi HTTP oltre GET e POST. Tuttavia, se si desidera veramente farlo da un browser, è possibile utilizzare AJAX per inviare PUT se DELETE s, ad es.YUI's Connection Manager permette di specificare uno dei seguenti metodi HTTP:

  • GET
  • POST
  • HEAD
  • PUT
  • DELETE