Get Json message from REST Openexchangerates service

Json – формат для обмена сообщениями, часто используется в REST/SOAP web service. В сети много публичных API RESTFull сервисов, попробуем получить сообщение в формате Json и распарсить его.

Задание:
Openexchangerates открытый веб сервис, получить сообщение, распарсить и сохранить в БД. Для примера возьмем сервис, который возвращает котировки валют по отношению к доллару. Попутно посмотрим какая страна за 18 лет максимально крепко стояла по отношению к доллару. Ну и на сколько Россия ушла ‘вверх’ по курсу к доллару.

Использовал:

Jackson Json API RESTFull

Необходимо выполнить:
– Создать БД;
– Создать REST client;
– Подготовить тестовые данные;
– Циклом пробежаться, читать из файла даты заполнить URL;
– Сохранить в БД;

Ссылка на API Introduction REST сервиса.

Get запрос: /api/historical/2001-02-16.json?app_id=YOUR_APP_ID
Хотим получить данные за каждый месяц за последние 18 лет.
Нам потребуется в цикле перебрать параметр: дата.
В ответе сервис возвращает сообщение в формате Json. Значит надо описать POJO класс.

{
  "disclaimer": "Usage subject to terms: https://openexchangerates.org/terms",
  "license": "https://openexchangerates.org/license",
  "timestamp": 982342800,
  "base": "USD",
  "rates": {
    "AED": 3.67246,
    "ALL": 144.529793,
    "ANG": 1.79,
    "ARS": 1.000567
  }
}

Полный скрипт создания таблицы будет в проекте на GitHub.

CREATE TABLE exchangerates(
id serial PRIMARY KEY,
data_cur DATA UNIQUE NOT NULL,
TIMESTAMP INT,
AED DECIMAL,
ANG DECIMAL);

Для описания POJO использую библиотеки lombok и jackson 2

@Getter
@Setter
@ToString
public class ClassRates {
    private String disclaimer;
    private String license;
    private int timestamp;
    private String base;
    private Rates rates;
}
 
@Getter
@Setter
@ToString
public class Rates{
    @JsonView
    private double AED;
    @JsonView
    private double ALL;
    @JsonView
...................

Для сохранения в БД используем Spring Jdbc и NamedParameterJdbcTemplate.

<bean id="dataSource"
	  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="org.postgresql.Driver" />
	<property name="url" value="jdbc:postgresql://localhost:5432/gotoqa" />
	<property name="username" value="postgres"/>
	<property name="password" value="postgres"/>
</bean>

Вызывать REST сервис будем с помощью Spring пакета RestTemplate.

RestTemplate restTemplate = new RestTemplate();
String fooResourceUrl
		= "https://openexchangerates.org/api/historical/"+line+".json?app_id=" +APIKEY;
ClassRates forObject = restTemplate.getForObject(fooResourceUrl, ClassRates.class);

Размаршаленные ответы от сервиса соберем в Map и затем все заинсертим в БД.

// Creating map with all required params
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("id", i);
paramMap.put("data_cur", line);
 
nqu.update(INSERT_QUERY, paramMap);

Получилась хорошая таблица по курсам валют за 18 лет (226 записей), для проведения дальнейшей аналитики.

Ну и график в Excel на скорую руку, по рублю за 18 лет.

Ссылка на полную версию проекта на GitHub:
Github USDHistoricalRateProject

Releated Post