REST post формат - PullRequest
       20

REST post формат

6 голосов
/ 02 октября 2009

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

Ответы [ 4 ]

4 голосов
/ 02 октября 2009

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

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

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

Обязательно прочтите следующие вопросы и ответы.

1 голос
/ 03 октября 2009

Я предлагаю использовать то, что проще всего, потому что именно в этом и заключается 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;
}
1 голос
/ 02 октября 2009

Зависит от исполнителя службы REST.

Если служба REST является адаптацией к существующим парам «ключ-значение» после HTML-формы, обычно легче начинать с нее.

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

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

0 голосов
/ 02 октября 2009

SOAP - это стандарт для веб-сервисов (я думаю, вы немного запутались между веб-сервисами и REST).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...