Как я могу отправить соответствующий статус HTTP для операторов MERGE? - PullRequest
1 голос
/ 03 февраля 2012

Я работаю над RESTful API для одной из наших моделей данных (Oracle) на работе и внедряю ее с JAX-RS (аннотации Java6). Проблема, на которую я надеюсь получить руководство, заключается в том, как вернуть соответствующий метод HTTP Status (201 для INSERT; 200 или 204 для UPDATE) после успешного завершения метода PUT, который реализуется с помощью идемпотентного запроса MERGE к базе данных. .

В настоящее время моя логика Java выглядит примерно так:

int affectedRows = customDataBasePackage.executeUpdatePreparedStatement(insertSql, insertParams);
if( affectedRows < 1 ) {
  if( checkRowsSql == null || checkRowsParams == null ) {
    return Response.status(412).build();
  } else {
    return this.executeSELECTreturnJSON(checkRowsSql, checkRowsParams, 412, 409);
  }
} else {
  return Response.status(201).build();
}

Метод executeUpdatePreparedStatement (String, Object []) просто получает PreparedStatement из переданного в sql, сопоставляет параметры и затем выполняет PreparedStatement.executeUpdated ();

Кроме того, причина, по которой я реализую свой метод PUT таким способом, заключается в том, что столбец id этой конкретной таблицы генерируется пользователем, поэтому методы INSERT и UPDATE должны быть идемпотентными. Насколько я понимаю, стандарт HTTP использует PUT для идемпотентных операций и POST для неидемпотентного создания.

Спасибо, что нашли время помочь!

1 Ответ

1 голос
/ 18 мая 2015

Вы можете использовать код 301 Перемещено навсегда. Для получения дополнительной информации вы можете проверить следующую ссылку: Книга веб-служб REST (стр. 372) 301 («Перемещено навсегда») : http://www.crummy.com/writing/RESTful-Web-Services/RESTful_Web_Services.pdfКроме того, вы можете проверить коды статусов ответов REST API поиска семейства по следующей ссылке: https://familysearch.org/developers/docs/guides/http-status-codes

...