Сохранить параметры запроса REST как поля * stati c - PullRequest
0 голосов
/ 17 апреля 2020

Полезно ли хранить параметры запроса в виде полей c для обработки запроса? Например, моя конечная точка принимает два параметра запроса. Чтобы проверить и обработать тело запроса, я должен передать эти параметры запроса всем низкоуровневым методам (например, последовательному подключению). Чтобы избежать этого, я могу сохранить эти параметры в виде полей stati c в классе stati c и получать доступ к этим параметрам всякий раз, когда требуется, вместо того, чтобы передавать их. Я довольно новичок в разработке REST и не хочу изобретать велосипед, если существуют существующие шаблоны для решения проблемы, с которой я сталкиваюсь. Есть какие-нибудь мысли о моем подходе?

В приведенном ниже коде я передаю параметры query1, query2, query3 API validateRequest, который снова передает некоторые параметры запроса его внутренним методам. Это последовательное соединение будет продолжено низкоуровневыми методами. Мой вопрос: если эти параметры запроса хранятся в классе stati c, мне не нужно передавать параметры запроса. Когда API требует параметры запроса, он может вызвать класс stati c для доступа к параметрам. Псевдокод:

public class Temp {

  @POST
  @Consumes(MediaType.APPLICATION_JSON)
  @Produces(MediaType.APPLICATION_JSON)

  public Response post(
      @QueryParam("query1")  final String query1,
      @QueryParam("query2") final String query2,
      @QueryParam("query3") final String query3,
      final Object requestBody) {

    validateRequest(requestBody,query1,query2,query3)

    return Response.status(Status.OK).build();

  }

  private void validateRequest(Object requestBody, String query1, String query2, String query3) {

    validateFirstPartOfRequest(requestBody,query1);
    validateSecondPartOfRequest(requestBody,query1,query2);
    validateThirdPartOfRequest(requestBody,query1),query3;
  }

}

1 Ответ

0 голосов
/ 17 апреля 2020

To validate and process the request body, I have to pass these query parameters to all the low-level methods Я не боюсь этого. Например, параметры запроса будут использоваться для фильтрации ресурсов коллекции, поэтому будет звучать логически c для передачи этих параметров до уровня доступа к данным для применения ваших фильтров на уровне базы данных (запрос критериев).

Если у вас есть Многие параметры просто заключают их в объект параметров (https://refactoring.guru/introduce-parameter-object)

Что касается stati c, это действительно плохая идея. Данные Stati c будут совместно использоваться всеми запросами (потоками), поступающими на ваш контроллер, и поэтому вы столкнетесь с некоторым перекрытием между значениями.

Не рекомендуется изменять переменную stati c из нескольких потоков, просто чтобы не переносить ее в экземпляр класса, но если это то, что вы хотите сделать, возможно, вам стоит взглянуть на ThreadLocal.

...