Выбрать главу

С объектом Traverson вы можете начать использовать API, перейдя по ссылкам. Например, предположим, что вы заинтересованы в получении списка всех ингредиентов. Из раздела 6.3.1 вы знаете, что ссылка ингредиентов имеет свойство href, которое ссылается на ресурс ingredients. Вам нужно перейти по этой ссылке:

ParameterizedTypeReference<Resources<Ingredient>> ingredientType =

 new ParameterizedTypeReference<Resources<Ingredient>>() {};

Resources<Ingredient> ingredientRes =

 traverson

   .follow("ingredients")

   .toObject(ingredientType);

 Collection<Ingredient> ingredients = ingredientRes.getContent();

Вызвав метод follow() для объекта Traverson, вы можете перейти к ресурсу, имя связи которого - ingredients. Теперь, когда клиент перешел к ингредиентам, вам нужно принять содержимое этого ресурса, вызвав toObject().

Метод toObject () требует, чтобы вы указали, в какой тип объекта считывать данные. Это может быть немного сложнее, учитывая, что вам нужно прочитать его как объект Resources<Ingredient>, а стирание типа Java затрудняет предоставление информации о типе для generic типа. Но создание ParameterizedTypeReference помогает в этом.

В качестве аналогии представьте, что вместо REST API это была домашняя страница на веб-сайте. И вместо кода REST клиента представьте, что вы просматриваете эту домашнюю страницу в браузере. Вы видите ссылку на странице с надписью «Ингредиенты» и переходите по этой ссылке, щелкая ее. По прибытии на следующую страницу вы читаете страницу, которая аналогична тому, как Traverson принял содержимое как объект Resources<Ingredient>.

Теперь давайте рассмотрим немного более интересный вариант использования. Допустим, вы хотите получить самые последние созданные тако. Начиная с домашнего ресурса, вы можете перейти к ресурсу с последними тако, например так:

ParameterizedTypeReference<Resources<Taco>> tacoType =

 new ParameterizedTypeReference<Resources<Taco>>() {};

Resources<Taco> tacoRes =

 traverson

   .follow("tacos")

   .follow("recents")

   .toObject(tacoType);

 Collection<Taco> tacos = tacoRes.getContent();

Здесь вы переходите по ссылке tacos, а затем оттуда по ссылке recents. Это приведет вас к интересующему вас ресурсу, поэтому вызов toObject() с соответствующей ParameterizedTypeReference даст вам то, что вы хотите. Метод .follow() можно упростить, перечислив имена отношений через запятую:

Resources<Taco> tacoRes =

 traverson

   .follow("tacos", "recents")

   .toObject(tacoType);

Как видите, Traverson упрощает навигацию по API с поддержкой HATEOAS и использование его ресурсов. Но он не предлагает никаких методов для записи или удаления по этим API. С другой стороны, RestTemplate может писать и удалять ресурсы, но не облегчает навигацию по API.

Если вам нужно не только перемещаться по API, но и обновлять или удалять ресурсы, вам нужно использовать RestTemplate и Traverson вместе. Traverson по-прежнему можно использовать для перехода по ссылке, где будет создан новый ресурс. Затем RestTemplate может быть предоставлена эта ссылка для выполнения POST, PUT, DELETE или любого другого HTTP-запроса.

Например, предположим, что вы хотите добавить новый ингредиент в меню Taco Cloud. Следующий метод addIngredient() объединяет Traverson и RestTemplate для добавления нового ингредиента по API:

private Ingredient addIngredient(Ingredient ingredient) {

 String ingredientsUrl = traverson

   .follow("ingredients")

   .asLink()

   .getHref();

 return rest.postForObject(ingredientsUrl,

   ingredient,

   Ingredient.class);

}

После перехода по ссылке ingredients вы запрашиваете саму ссылку, вызывая asLink(). По этой ссылке вы запрашиваете URL ссылки, вызывая getHref(). Имея URL-адрес, у вас есть все, что нужно для вызова postForObject() в экземпляре RestTemplate и сохранения нового ингредиента.

ИТОГ:

Клиенты могут использовать RestTemplate для выполнения HTTP-запросов к REST API.

Traverson позволяет клиентам перемещаться по API с помощью гиперссылок, встроенных в ответы.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Spring in Action Covers Spring 5.0 перевод на русский. Глава 8

8.Отправка сообщений асинхронно

Эта глава охватывает

Асинхронный обмен сообщениями

Messages Отправка сообщений с помощью JMS, RabbitMQ и Kafka

Вытягивание сообщений из broker

Листинер для сообщений

 

Сейчас 4:55 вечера пятницы. В нескольких минутах от долгожданного отпуска. У вас достаточно времени, чтобы доехать до аэропорта и успеть на самолет. Но прежде чем собраться и отправиться в путь, вы должны быть уверены, что ваш начальник и коллеги знают о состоянии работы, которую вы выполняли, чтобы в понедельник они могли узнать, где вы остановились. К сожалению, некоторые из ваших коллег уже пропустили выходные, а ваш начальник связывается с вами с митинга. Чем ты занимаешься?