SlideShare a Scribd company logo
RESTful API
Мобильные Клиенты
Дмитрий Викторович Малыханов
DataArt
Почему REST?
@Path("/users")
@Produces({ "application/xml", "application/json" })
@RequestScoped
public class UsersRestfulService {
@PersistenceContext
private EntityManager em;
@GET
public List<User> list() {
return em.createNamedQuery("User.findAll", User.class).getResultList();
}
@GET
@Path("/{email}")
public User findByEmail(@PathParam("email") String email) {
return em.createNamedQuery("User.findByEmail", User.class)
.setParameter("email", email).getSingleResult();
}
}
Потому что:

1.
2.
3.
4.

Быстро
Удобно
Понятно
Универсально
Зачем
оптимизировать?

Процессор == Заряд Аккумулятора

Объём данных == Деньги
Ошибка №1

Уже есть замечательный RPC,
работающий много лет c тысячами
клиентов?
Неправильно:
Просто "обернуть" в JSON over HTTP
Главный принцип

Программа
=
Алгоритм
+
Структуры данных
Что оптимизируем?
Нужно:
Оптимальный код
Делаем:
Оптимизируем алгоритм

Нужно:
Оптимальный интерфейс
Делаем:
Оптимизируем структуры данных
Рецепт №0
"Каждый делает своё дело"
Application Server обрабатывает
данные
Web Server передаёт данные
Рецепт №1
"Выжимайте все соки!"
Включите gzip сжатие при отсылке
данных
Важно:
Не пытайтесь сжимать всё подряд
(правило "256")
Рецепт №2

"Не откусывайте больше, чем надо!"

Ограничивайте длину списков
Рецепт №2: Пример
[

[
{field1:"value", ... },

{field1:"value", ... },

// 200 записей

// 20 записей

{field1:"value", ... }

{field1:"value", ... }

]

]

Итого:

Итого:

50 Kbytes

5 Kbytes
Рецепт №3

Избавьтесь от лишнего "веса"!

Только те поля, которые реально
используются на клиенте.
Рецепт №3: Пример
Joe Doe
Engineering
{

{
first:"Joe",last:"Doe",

first:"Joe",last:"Doe",

age:45, employer:"ACME",

department:25,

department:25,

photo:1945678

address:{country:"UK",

}

city:"Bristol",
street:"Main",
building:12},
photo:1945678,sex:'M'
}

на 70..90% меньше!
Рецепт №4

Соблюдайте правила движения!

Используйте все возможности HTTP
Рецепт №4: Пример 1
GET /rest/resource/path HTTP/1.1
Host: server.example.com
If-Modified-Since: Sat, 1 Oct 2011 00:00 GMT

Smartphone
SERVER

HTTP/1.1 304 Not Modified
Рецепт №4: Пример 2
GET /rest/resource/path HTTP/1.1
Host: server.example.com

Smartphone
SERVER

HTTP/1.1 200 OK
Expires: Sat, 29 Oct 2011 06:00 GMT
Рецепт №5: XML
"KISS"
Разбор потока XML обычно проще
разбора потока JSON
Важно:
"Избыточность" XML легко
устраняется
Рецепт Последний

Универсального решения НЕТ

Всегда АНАЛИЗИРУЙТЕ требования
и применяйте КОМПЛЕКС мер
RESTful API
Мобильные Клиенты
Вопросы?
Дмитрий Викторович Малыханов
DataArt
JavaDay 2011

More Related Content

Similar to JavaDay 2011

вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGAndrey Rebrov
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
Noveo
 
servlets1.pdf
servlets1.pdfservlets1.pdf
servlets1.pdf
ssuser0562f1
 
Мультитенанстность в Exchange
Мультитенанстность в ExchangeМультитенанстность в Exchange
Мультитенанстность в Exchange
UC2
 
MyBatis на практике
MyBatis на практикеMyBatis на практике
MyBatis на практике
Vitebsk Miniq
 
servlets.pdf
servlets.pdfservlets.pdf
servlets.pdf
ssuser0562f1
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJS
Yura Bogdanov
 
SECON'2016. Бочкарев Игорь, Реактивные мобильные приложения
SECON'2016. Бочкарев Игорь, Реактивные мобильные приложенияSECON'2016. Бочкарев Игорь, Реактивные мобильные приложения
SECON'2016. Бочкарев Игорь, Реактивные мобильные приложения
SECON
 
My batis
My batisMy batis
Let’s talk about Atlas
Let’s talk about AtlasLet’s talk about Atlas
Let’s talk about Atlas
Artem Sokovets
 
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
Binwell
 
Postman тестирование api v1.0 (1)
Postman тестирование api v1.0 (1)Postman тестирование api v1.0 (1)
Postman тестирование api v1.0 (1)
DataArt
 
RxJava + Retrofit
RxJava + RetrofitRxJava + Retrofit
RxJava + Retrofit
Dev2Dev
 
Тестирование Web API
Тестирование Web APIТестирование Web API
Тестирование Web API
Byndyusoft
 
Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5
Dmitriy Krukov
 
Building corporate portals with liferay JEEConf 2011
Building corporate portals with liferay   JEEConf 2011Building corporate portals with liferay   JEEConf 2011
Building corporate portals with liferay JEEConf 2011Alexey Kakunin
 
JDBC
JDBCJDBC
Java осень 2013 лекция 8
Java осень 2013 лекция 8Java осень 2013 лекция 8
Java осень 2013 лекция 8Technopark
 

Similar to JavaDay 2011 (20)

вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
 
BlueEyes russian
BlueEyes russianBlueEyes russian
BlueEyes russian
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
servlets1.pdf
servlets1.pdfservlets1.pdf
servlets1.pdf
 
Мультитенанстность в Exchange
Мультитенанстность в ExchangeМультитенанстность в Exchange
Мультитенанстность в Exchange
 
The Best Portlet
The Best PortletThe Best Portlet
The Best Portlet
 
MyBatis на практике
MyBatis на практикеMyBatis на практике
MyBatis на практике
 
servlets.pdf
servlets.pdfservlets.pdf
servlets.pdf
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJS
 
SECON'2016. Бочкарев Игорь, Реактивные мобильные приложения
SECON'2016. Бочкарев Игорь, Реактивные мобильные приложенияSECON'2016. Бочкарев Игорь, Реактивные мобильные приложения
SECON'2016. Бочкарев Игорь, Реактивные мобильные приложения
 
My batis
My batisMy batis
My batis
 
Let’s talk about Atlas
Let’s talk about AtlasLet’s talk about Atlas
Let’s talk about Atlas
 
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
 
Postman тестирование api v1.0 (1)
Postman тестирование api v1.0 (1)Postman тестирование api v1.0 (1)
Postman тестирование api v1.0 (1)
 
RxJava + Retrofit
RxJava + RetrofitRxJava + Retrofit
RxJava + Retrofit
 
Тестирование Web API
Тестирование Web APIТестирование Web API
Тестирование Web API
 
Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5
 
Building corporate portals with liferay JEEConf 2011
Building corporate portals with liferay   JEEConf 2011Building corporate portals with liferay   JEEConf 2011
Building corporate portals with liferay JEEConf 2011
 
JDBC
JDBCJDBC
JDBC
 
Java осень 2013 лекция 8
Java осень 2013 лекция 8Java осень 2013 лекция 8
Java осень 2013 лекция 8
 

JavaDay 2011