2009-10-02 16 views
6

Cuando utiliza REST para crear una nueva entrada usando una POST, veo que algunas API como Google's especifican que envía XML como parte de la solicitud, mientras que otras especifican que envía pares clave/valor. ¿Existe un estándar o una mejor práctica para REST POST-s?Formato de publicación REST

Respuesta

1

Depende del implementador del servicio REST.

Si el servicio REST es una adaptación de un formato html HTML existente, generalmente es más fácil comenzar con pares de valores de clave de publicación.

Al publicar información de JavaScript, generalmente es más fácil usar JSON.

XML se usa a menudo porque es fácil de entender para los humanos y hay montones de herramientas en cada idioma/plataforma que pueden manejarlo.

+0

XML más fácil de entender que JSON? – Kevin

4

Cualquier formato de representación que funcione está bien, con la condición de que intente utilizar formatos estándar como Atom, donde existan.

actualización He aquí una relevant quote de Roy Fielding (co-autor de la norma HTTP, y la persona que articula descansar en su tesis de doctorado). La forma de diseñar las representaciones utilizadas en el servicio web es de importancia central:

Una API REST debe pasar la mayor parte de su esfuerzo descriptiva en la definición de el tipo (s) de comunicación utilizado para recursos que representan [.. .]

Asegúrese de leer el seguimiento de Q & A.

-7

SOAP es el estándar para servicios web (creo que estás un poco confundido bewteen servicios Web y REST).

Pero realmente depende de los implementadores.

+0

dude en explicar lo que está mal con este post ... –

+0

"Web Services" es ahora un término más general que describe la manera de estructurar la Web para que sea lo más conveniente para los programas para navegar y operar, ya que en es para humanos SOAP es un conjunto de estándares W3C que tienen este objetivo, y SOAP utiliza XML exclusivamente. REST no es un estándar per se, sino un estilo arquitectónico para estructurar servicios web que aprovecha al máximo HTTP y otros estándares web. Los * RESTful Web Services * (O'Reilly) de Richardson y Ruby son un recurso maravilloso para aprender sobre el enfoque REST. –

+0

Sí ... pero el simple hecho de tener un 'Servicio web' no significa que sea REST. REST es más que eso. Pero este tipo no quiere un RESTO completo, solo quiere un estándar para WebServices. De ahí mi respuesta. –

1

Sugiero usar lo más simple porque de eso se trata REST. El siguiente fragmento de código es cómo hago una publicación. Sé que no estabas buscando código específicamente, pero la API a continuación (httpClient) funciona muy bien. Luego decodifica usando las herramientas que los codificadores siempre hemos usado (request.getParameter()). Creo que esto es lo que distingue a REST de SOAP. No lo hagas difícil! Use 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; 
} 
Cuestiones relacionadas