2009-10-02 13 views
6

Quando si utilizza REST per creare una nuova voce utilizzando un POST, vedo alcune API come Google's specificare che si invia XML come parte della richiesta mentre altri specificano che si inviano coppie chiave/valore. Esiste uno standard o una best practice per POST-REST?Formato post REST

risposta

1

Dipende dall'implementatore del servizio REST.

Se il servizio REST è un adattamento di un modulo HTML HTML esistente, è generalmente più semplice iniziare con le coppie di valori chiave.

Quando si pubblicano informazioni da JavaScript, in genere è più semplice utilizzare JSON.

XML è spesso utilizzato perché è facile da comprendere per gli esseri umani e ci sono un sacco di strumenti in ogni lingua/piattaforma che può occuparsene.

+0

XML più facile da capire rispetto a JSON? – Kevin

4

Qualsiasi formato di rappresentazione che funzioni va bene, con la clausola che si dovrebbe provare molto duramente ad usare formati standard come Atom dove esistono.

Aggiornamento Ecco un relevant quote da Roy Fielding (co-autore dello standard HTTP, e la persona che articola REST nella sua tesi di dottorato). Come si progetta le rappresentazioni utilizzati nel servizio web è di centrale importanza:

A REST API dovrebbe spendere quasi tutta del suo sforzo descrittivo nella definizione il tipo di supporto (s) utilizzato per risorse che rappresentano [.. .]

assicurarsi di leggere il follow-on Q & A.

-7

SOAP è lo standard per servizi Web (Penso che tu sia un po 'confuso bewteen WebServices e REST).

Ma è davvero compito degli implementatori.

+0

Sentitevi liberi di spiegare ciò che è sbagliato con questo annuncio ... –

+0

"Web Services" è ora un termine più generale che descrive il modo di strutturare il Web in modo che sia più comodo per i programmi di navigare e operare su come è per gli umani. SOAP è un insieme di standard W3C che hanno questo obiettivo e SOAP utilizza esclusivamente XML. REST non è uno standard di per sé, ma uno stile architettonico per la strutturazione di servizi Web che sfrutta al massimo l'HTTP e altri standard Web. Richardson and Ruby * RESTful Web Services * (O'Reilly) è una risorsa meravigliosa per conoscere l'approccio REST. –

+0

Sì ... ma puramente con un "WebService" non significa che sia REST. REST è più di questo. Ma questo ragazzo in realtà non vuole REST completo, vuole solo uno standard per i servizi Web. Quindi la mia risposta. –

1

Suggerisco di utilizzare ciò che è più semplice perché è quello che riguarda il REST. Il frammento di codice qui sotto è come faccio un post. So che non stavi cercando codice specifico, ma l'API di seguito (httpClient) funziona alla grande. Quindi decodificarlo utilizzando gli strumenti che i codificatori hanno sempre utilizzato (request.getParameter()). Credo che questo sia ciò che distingue REST da SOAP. Non renderlo difficile! Usa HTTP!

public void testHttpClient() { 
    PostMethod pMethod = null; 
    pMethod = new PostMethod("...url..."); 
    NameValuePair[] data = {new NameValuePair("activeFlag", "yes"), new NameValuePair("custCode", "B010"), new NameValuePair("comments", "mark is cool")}; 
    pMethod.setRequestBody(data); 
    this.makeCall(pMethod); 
} 
private String makeCall(HttpMethod method) { 
    String response = null; 
    HttpClient client = new HttpClient(); 
    client.getParams().setAuthenticationPreemptive(true); 
    client.getState().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(this.logon, this.pass)); 
    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); 
    method.getParams().setIntParameter(HttpMethodParams.SO_TIMEOUT, 5000); 
    try { 
     int statusCode = client.executeMethod(method); 
     if (statusCode != HttpStatus.SC_OK) { 
      System.err.println("Method failed: " + method.getStatusLine()); 
     } 
     String aLine = null; 
     StringBuffer sb = new StringBuffer(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream())); 
     while ((aLine = in.readLine()) != null) { 
      sb.append(aLine.trim()); 
      System.out.println(aLine); 
     } 
     in.close(); 
     response = sb.toString(); 
    } catch (HttpException e) { 
     System.err.println("Fatal protocol violation: " + e.getMessage()); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     System.err.println("Fatal transport error: " + e.getMessage()); 
     e.printStackTrace(); 
    } finally { 
     method.releaseConnection(); 
    } 
    return response; 
} 
Problemi correlati