
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