2009-10-02 4 views
6

Когда вы используете REST для создания новой записи с помощью POST, я вижу, что некоторые API, такие как Google's, указывают, что вы отправляете XML как часть запроса, в то время как другие указывают, что вы отправляете пары ключ/значение. Существует ли стандартная или лучшая практика для REST POST-s?REST post format

ответ

1

Это зависит от поставщика услуг REST.

Если услуга REST является адаптированием существующих html-HTML-форм, то ключ-ключ, как правило, легче начать с.

При публикации информации с JavaScript обычно проще использовать JSON.

XML часто используется, потому что людям это легко понять, и на каждом языке/платформе есть множество инструментов на каждом языке.

+0

XML проще понять, чем JSON? – Kevin

4

Любой формат представления, который работает, в порядке, при условии, что вы должны очень стараться использовать стандартные форматы, такие как Atom, где они существуют.

Update Вот relevant quote от Рой Филдинг (соавтор стандарта HTTP, и человека, который сочлененного покоиться в своей докторской диссертации). Как вам дизайн представления, используемое в вашем вебе-службе имеет решающее значение:

Отдыхает API должно потратить почти все его описательных усилий в определении типа носителя (ов), используемый для представляющих ресурсов [.. .]

обязательно прочитайте последующее на Q & A.

-7

SOAP является стандартом для WebServices (я думаю, что вы немного запутались bewteen WebServices и REST).

Но это действительно зависит от разработчиков.

+0

Вы можете объяснить, что случилось с этим постом ... –

+0

«Web Services» теперь более общий термин, описывающий способы структурирования Web, так что это так удобно для программ просмотра и работать на нем, как для людей. SOAP - это набор стандартов W3C, которые имеют эту цель, и SOAP использует исключительно XML. REST - это не стандарт как таковой, а архитектурный стиль для структурирования веб-сервисов, который максимально использует HTTP и другие веб-стандарты. Richardson и Ruby * RESTful Web Services * (O'Reilly) - прекрасный ресурс для изучения подхода REST. –

+0

Да ... но чисто «WebService» не означает, что это REST. REST - это нечто большее. Но этот парень действительно не хочет полного REST, он хочет только стандарт для WebServices. Отсюда мой ответ. –

1

Я предлагаю использовать то, что является самым простым, потому что это то, что является REST. Ниже приведен фрагмент кода, как я делаю сообщение. Я знаю, что вы не искали код специально, но API ниже (httpClient) отлично работает. Затем вы декодируете его, используя инструменты, которые мы всегда использовали кодировщиками (request.getParameter()). Я считаю, что это то, что отличает REST от SOAP. Не мешайте! Использовать 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; 
}