RESTful Web

Кирпиченков Денис / dkirpichenkov@naumen.ru

d0k1.github.io/GetRest/

План

  • Где встречается REST
  • REST
  • Java REST сервер
  • Postman REST клиент
  • Практика

Самый простой протокол

Большое приложение

VK.COM

Получение данных о пользователе

Web-приложение

Тестирование без UI

REpresentational State Transfer

  • Простота
  • Гибкость
  • Переносимость

Архитектура REST

  • Клиент-Сервер
  • Нет состояния
  • Кеширование
  • Единообразный интерфейс

HTTP REST

  • GET http://www.example.com/customers/123
  • PUT http://www.example.com/customers/12345
  • POST http://www.example.com/customers
  • DELETE http://www.example.com/customers/12345

HTTP REST

Метод /customers /customer/{id}
GET Список клиентов Клиента по id
PUT 404 Изменение клиента по id
POST Новый клиент 404
DELETE 404 Удаление клиента по id

Java REST сервер

  • Модель и хранилище данных
  • Класс обработчик rest-запросов
  • Класс обработчик "запросов браузера"

Модель данных


/**
* простое представление замера температуры в определенную дату
*/
public class WeatherData
{
    // идентификатор сущности
    private int id;

    // строковое представление даты, пример '31-10-2016'
    private String date;

    // целочисленное представление температуры, пример -5
    private int temperature;
}

Обработка REST запросов


/**
 * Простой пример REST контрлллера, который будет обрабатывать запросы
 *
 * Важно
 * @RestController автоматическое преобразование данных из/в JSON
 * @PathVariable - получение данных из url
 * @RequestBody - получение объекта из тела запроса
 * @RequestMapping - указание URL и HTTP метода для обработки
 */
@RestController
public class WeatherController
{

}

GET запрос


@RestController
public class WeatherController
{
    @RequestMapping(value = "/weatherdata", method = RequestMethod.GET)
    public List<WeatherData> getWeather()
    {
        return Arrays.asList(new WeatherData("30-10-2016", -1), 
                            new WeatherData("31-10-2016", -3));
    }
}

GET ответ

PUT запрос


@RestController
public class WeatherController
{
    @RequestMapping(value = "/weatherdata/{id}", method = RequestMethod.PUT)
    public WeatherData putWeather(@PathVariable int id
                                  HttpServletRequest request, 
                                  HttpServletResponse response)
    {
        return new WeatherData("-1", id);
    }
}

Postman

JSP пример


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="ru.naumen.model.WeatherData" %>
<%@ page import="java.util.ArrayList" %>
<%
    ArrayList<String> weather = new ArrayList<>();
    weather.add("String 1");
    weather.add("String 2");
%>
<%
 for(String item:weather) {
     out.print(item);
 }
%>

Практическая часть

  • Java web-приложение
  • Хранилище погоды в виде singleton
  • Реализовать GET, POST, PUT, DELETE операции. Для тестирования использовать Postman
  • JSP для отображения всех погодных данных

https://github.com/d0k1/GetRest.git,
ветка Master