Можно ли обнаружить параметры конечной точки в приложении Spring Boot? - PullRequest
0 голосов
/ 02 марта 2020

У меня есть приложение Spring Boot, предоставляющее некоторые конечные точки для запросов REST. Я пытаюсь отделить два компонента (которые в настоящее время непосредственно вызывают код друг друга), и я хочу, чтобы они отправляли друг другу запросы REST (для возможной реализации микросервиса). Я знаю, что обнаружение конечной точки может быть выполнено через службу обнаружения (например, Eureka), но есть ли способ также передать информацию о параметрах из службы, которая требует ее, клиенту, запрашивающему ее? Пример: у меня есть служба корзины покупок, которая полагается на информацию о продуктах, доступных для покупки. С помощью Eureka (или другого инструмента обнаружения услуг) я могу зарегистрировать свои службы, чтобы служба корзины покупок теперь знала об услуге продукта. Если у службы продукта есть что-то вроде:

@GetMapping("/product")
public Product findById(@RequestParam int id) {
  return products.find(id);
}

Я знаю, чтобы использовать эту конечную точку для получения продукта с идентификатором 3, служба корзины должна будет запросить http://localhost: 1234 / product? id = 3 , но есть ли способ обнаружить эти параметры и их требуемые типы во время выполнения? В моем примере, если я использую Eureka, служба корзины покупок динамически получает информацию о местонахождении службы продукта, но не получает информацию о параметрах, которые примут ее конечные точки. Я знаю, что Spring Boot Actuator должен предоставлять эту информацию, но всякий раз, когда я ее использую, поле params для моих конечных точек всегда пустое.

Ответы [ 3 ]

2 голосов
/ 02 марта 2020

Есть ли способ обнаружить эти параметры и их требуемые типы во время выполнения?

Вам действительно нужна эта информация во время выполнения?

Потому что это было бы намного проще, если бы вам это понадобилось во время разработки. Тогда вы можете просто использовать что-то вроде Swagger , что обеспечит конечную точку спецификации сервиса. Он может даже генерировать клиента для вашего сервиса.

Но, если вы действительно этого хотите во время выполнения, вам может быть лучше работать с HATEOAS API. HATEOAS (гипермедиа как движок состояния приложения) означает, что ваш API доступен для навигации. Это означает, что клиенты могут «сканировать» ваш API по представленным ссылкам, как человек, который перемещается по сайту. Насколько это будет полезно, зависит от того, чего вы пытаетесь достичь.

Для этого есть два популярных «решения»:

  • HAL (гипертекстовое приложение Язык) - все еще Inte rnet Draft
  • JSON -LD (JSON для связывания данных) - A W3 C Standard

Spring Boot имеет поддержку HAL, см. spring-boot-starter-hateoas .

0 голосов
/ 04 марта 2020

Вы можете использовать Swagger в сервисе вашего продукта для генерации apis, представленного в файле json. Например, вы можете посмотреть пример проекта petstore с его json выставленным , содержащим apis и параметры с определением.

Затем в вашей корзине вы можете перемещаться во время выполнения продукта apis службы, итерации для определенных параметров c API.

0 голосов
/ 02 марта 2020

Вы можете использовать карту параметров, которая будет динамически заполняться всеми используемыми параметрами:

@GetMapping("/product")
public Product findById(@RequestParam Map<String,String> allRequestParams) {
 return products.find(allRequestParams.get("id"));
}

Вы можете выполнить итерацию карты параметров, чтобы найти, какие параметры присутствуют.

...