Enviar búsqueda
Cargar
BlueEyes russian
•
0 recomendaciones
•
331 vistas
M
Misha SocialMedia
Seguir
Tecnología
Empresariales
Denunciar
Compartir
Denunciar
Compartir
1 de 24
Descargar ahora
Descargar para leer sin conexión
Recomendados
Web internship java script
Web internship java script
Noveo
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest
Web осень 2012 лекция 4
Web осень 2012 лекция 4
Technopark
FileAPI 2.0
FileAPI 2.0
Константин Лебедев
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2
Paul Klimov
Приложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefest
Actis Wunderman
Jsfwdays 2013-2
Jsfwdays 2013-2
Pavlo Iuriichuk
course js day 4
course js day 4
Georgyi Grigoryev
Recomendados
Web internship java script
Web internship java script
Noveo
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest
Web осень 2012 лекция 4
Web осень 2012 лекция 4
Technopark
FileAPI 2.0
FileAPI 2.0
Константин Лебедев
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2
Paul Klimov
Приложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefest
Actis Wunderman
Jsfwdays 2013-2
Jsfwdays 2013-2
Pavlo Iuriichuk
course js day 4
course js day 4
Georgyi Grigoryev
Eclipse Party Toulouse - EEF and Acceleo
Eclipse Party Toulouse - EEF and Acceleo
fmadiot
Zasfgwhistle
Zasfgwhistle
BroFuller
Презентация - INFOLine Retailer Russia TOP-100
Презентация - INFOLine Retailer Russia TOP-100
Иван Федяков
Տարեկան հաշվետվություն
Տարեկան հաշվետվություն
topchik
Ruby紹介3(pdf)
Ruby紹介3(pdf)
Gohryuh
ระบบคอมพิวเตอร์
ระบบคอมพิวเตอร์
nattarikaii
Destroyer paper model manual
Destroyer paper model manual
Genesis1A
PMO em Lisarb
PMO em Lisarb
Marco Coghi
Lokale politiek en social media; D66 de Kempen
Lokale politiek en social media; D66 de Kempen
Kamsteeg Executive Search
Comites proyectos y celebraciones
Comites proyectos y celebraciones
hildebon
Kongo manual new
Kongo manual new
Genesis1A
Get Green
Get Green
Marco Coghi
เทคโนโลยีสารสนเทศหลิว
เทคโนโลยีสารสนเทศหลิว
Nart-Anong Srinak
IEAエネルギー技術展望2010
IEAエネルギー技術展望2010
Hiroyuki Kita
Шелехов, Online FAQ 2011
Шелехов, Online FAQ 2011
Ruslan Shelekhov
CONSTRUÇÃO DE UM MURO DE ARRIMO
CONSTRUÇÃO DE UM MURO DE ARRIMO
Marco Coghi
Quản trị chiến lược chuẩn
Quản trị chiến lược chuẩn
AskSock Ngô Quang Đạo
Obserwacja bociana białego 2
Obserwacja bociana białego 2
Anna Muzyka
Slideshareflickr
Slideshareflickr
Susanne Becker
Wk hoofdstuk 27
Wk hoofdstuk 27
aphroditje
automation is iOS development
automation is iOS development
Ivan Trifonov
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Andrey Rebrov
Más contenido relacionado
Destacado
Eclipse Party Toulouse - EEF and Acceleo
Eclipse Party Toulouse - EEF and Acceleo
fmadiot
Zasfgwhistle
Zasfgwhistle
BroFuller
Презентация - INFOLine Retailer Russia TOP-100
Презентация - INFOLine Retailer Russia TOP-100
Иван Федяков
Տարեկան հաշվետվություն
Տարեկան հաշվետվություն
topchik
Ruby紹介3(pdf)
Ruby紹介3(pdf)
Gohryuh
ระบบคอมพิวเตอร์
ระบบคอมพิวเตอร์
nattarikaii
Destroyer paper model manual
Destroyer paper model manual
Genesis1A
PMO em Lisarb
PMO em Lisarb
Marco Coghi
Lokale politiek en social media; D66 de Kempen
Lokale politiek en social media; D66 de Kempen
Kamsteeg Executive Search
Comites proyectos y celebraciones
Comites proyectos y celebraciones
hildebon
Kongo manual new
Kongo manual new
Genesis1A
Get Green
Get Green
Marco Coghi
เทคโนโลยีสารสนเทศหลิว
เทคโนโลยีสารสนเทศหลิว
Nart-Anong Srinak
IEAエネルギー技術展望2010
IEAエネルギー技術展望2010
Hiroyuki Kita
Шелехов, Online FAQ 2011
Шелехов, Online FAQ 2011
Ruslan Shelekhov
CONSTRUÇÃO DE UM MURO DE ARRIMO
CONSTRUÇÃO DE UM MURO DE ARRIMO
Marco Coghi
Quản trị chiến lược chuẩn
Quản trị chiến lược chuẩn
AskSock Ngô Quang Đạo
Obserwacja bociana białego 2
Obserwacja bociana białego 2
Anna Muzyka
Slideshareflickr
Slideshareflickr
Susanne Becker
Wk hoofdstuk 27
Wk hoofdstuk 27
aphroditje
Destacado
(20)
Eclipse Party Toulouse - EEF and Acceleo
Eclipse Party Toulouse - EEF and Acceleo
Zasfgwhistle
Zasfgwhistle
Презентация - INFOLine Retailer Russia TOP-100
Презентация - INFOLine Retailer Russia TOP-100
Տարեկան հաշվետվություն
Տարեկան հաշվետվություն
Ruby紹介3(pdf)
Ruby紹介3(pdf)
ระบบคอมพิวเตอร์
ระบบคอมพิวเตอร์
Destroyer paper model manual
Destroyer paper model manual
PMO em Lisarb
PMO em Lisarb
Lokale politiek en social media; D66 de Kempen
Lokale politiek en social media; D66 de Kempen
Comites proyectos y celebraciones
Comites proyectos y celebraciones
Kongo manual new
Kongo manual new
Get Green
Get Green
เทคโนโลยีสารสนเทศหลิว
เทคโนโลยีสารสนเทศหลิว
IEAエネルギー技術展望2010
IEAエネルギー技術展望2010
Шелехов, Online FAQ 2011
Шелехов, Online FAQ 2011
CONSTRUÇÃO DE UM MURO DE ARRIMO
CONSTRUÇÃO DE UM MURO DE ARRIMO
Quản trị chiến lược chuẩn
Quản trị chiến lược chuẩn
Obserwacja bociana białego 2
Obserwacja bociana białego 2
Slideshareflickr
Slideshareflickr
Wk hoofdstuk 27
Wk hoofdstuk 27
Similar a BlueEyes russian
automation is iOS development
automation is iOS development
Ivan Trifonov
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Andrey Rebrov
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
HappyDev
My batis
My batis
Vitali Kviatkouski
MyBatis на практике
MyBatis на практике
Vitebsk Miniq
Web весна 2013 лекция 4
Web весна 2013 лекция 4
Technopark
Web весна 2012 лекция 4
Web весна 2012 лекция 4
Technopark
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
Andrey Rebrov
SECON'2016. Иовлев Роман, JDI is UI Automation Future
SECON'2016. Иовлев Роман, JDI is UI Automation Future
SECON
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Yulia Tsisyk
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
Regn
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Vladimir Kochetkov
Reform: путь к лучшему ORM
Reform: путь к лучшему ORM
Badoo Development
Web весна 2013 лекция 10
Web весна 2013 лекция 10
Technopark
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
Igor Khrol
ProveIT. ETL как конструктор алгоритмов обработки данных.
ProveIT. ETL как конструктор алгоритмов обработки данных.
chester_ds
django cheBit'11
django cheBit'11
dva
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
GeeksLab Odessa
Database (Lecture 14 – database)
Database (Lecture 14 – database)
Noveo
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Ontico
Similar a BlueEyes russian
(20)
automation is iOS development
automation is iOS development
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
My batis
My batis
MyBatis на практике
MyBatis на практике
Web весна 2013 лекция 4
Web весна 2013 лекция 4
Web весна 2012 лекция 4
Web весна 2012 лекция 4
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
SECON'2016. Иовлев Роман, JDI is UI Automation Future
SECON'2016. Иовлев Роман, JDI is UI Automation Future
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Reform: путь к лучшему ORM
Reform: путь к лучшему ORM
Web весна 2013 лекция 10
Web весна 2013 лекция 10
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
ProveIT. ETL как конструктор алгоритмов обработки данных.
ProveIT. ETL как конструктор алгоритмов обработки данных.
django cheBit'11
django cheBit'11
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Database (Lecture 14 – database)
Database (Lecture 14 – database)
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
BlueEyes russian
1.
Michael Lagutko @mlagutko
BlueEyes
2.
Цели • Создание RESTful сервисов • Высокая производительность (асинхронная
обработка запросов) • Масштабируемость (отсутствие поддержки состояния) • Автомотическое тестирование (Независимость от сервера)
3.
Service • BlueEyesServiceBuilder • Комбинаторы оброботчиков запросов •
Уникальное имя и версия • Жизненный цикл • Контекст
4.
Жизненный цикл сервиса • Старт • Обработка запросов •
Остановка
5.
Комбинаторы оброботчиков
запросов • path(*padern*) { ... } • contentType(*mimeType*) { ... } • get { ... } • put { ... } • post { ... } • delete { ... } • … path("/emails"){ get { request => val response = H"pResponse(content = Some(emailIds)) Future.sync{response } } }
6.
Комбинаторы путей • Строковый: "/foo/bar” • Символьный: "/foo/'fooId” •
Но основе регулярных выражений:"/foo/bar/baz.(? <extension>w{3,4})” path("/emails"){ path('emailId) { path("(?<bar>[a‐z]+)"){ get { request => val fooId = request.parameters('fooId) val extension = request.parameters('extension) ... } } } }
7.
Комбинации оброботчиков запросов produces(applicavon/json) { path("/users/") { get { request => // get list of all users ... } ~ path('userId) { parameter('userId) { userId => get { request => // get user ... } ~ put { request => // update user ... } } } } }
8.
Контекст • Конфигурация • Имя сервиса •
Версия сервиса
9.
Простой сервис trait EmailServices extends BlueEyesServiceBuilder { val emailService = service("email", "1.32") { context => startup { loadContactList(context.config("contactFile")) } ‐> request { contactList => path("/emails/") { produce(applicavon/json) { get { request => Future.async{ …
H"pResponse(content = Some(JArray(emailIds))) } } } } ~ path('emailId) { produce(applicavon/json) { get { request => val emailId = request.parameters('emailId) ... Future.sync(H"pResponse(content = Some(emailObj))) } } } } ‐> shutdown { contactList => contactList.finalize } } }
10.
HdpRequest • method: HdpMethod • uri: URI •
parameters: Map[Symbol, String] • headers: HdpHeaders • content: Op]on[ByteChunk] • …
11.
HdpResponse • status: HdpStatus • headers: HdpHeaders •
content: Op]on[ByteChunk] • …
12.
ByteChunk trait Chunk[T]{ def data: T def next: Opvon[Future[Chunk[T]]] } type ByteChunk = Chunk[Array[Byte]]
13.
Получение всего контента запроса path("/emails/") { aggregate(None){ get { request: H"pRequest[ByteChunk] => Future.async{ … HdpResponse(content = Some(JArray(emailIds))) } } } }
14.
Бизнесс данные • Explicitly: post { request: H"pRequest[ByteChunk] => val bijecvon = BijecvonsChunkJson.ChunkToJValue val emailId = request.content.map(bijec]on(_)) ... Future.sync(HdpResponse(content = Some(bijec]on.Inverse(emailObj)))) } • Implicitly: trait EmailServices extends BlueEyesServiceBuilder with Bijec]onsChunkJson … contentType(MimeTypes.applica]on/MimeTypes.json) { post { request: H"pRequest[JValue] => val emailId = request.content ... Future.sync(HdpResponse(content = Some(emailObj))) } }
15.
Расширение сирвисов • Фабрики сервис дескрипторов • Logging •
Health monitors • Request logging
16.
Logging trait LogDemo extends BlueEyesServiceBuilder { val logDemoService = service("logdemo", "1.32") { logging { log => context => startup { request { state => path("/foo") { contentType(applicavon/json) { get { request => log.info("request at /foo") ... } } } } } }
17.
Request Logging (W3C Extended Log
format) trait RequestLogDemo extends BlueEyesServiceBuilder { val requestLogDemoService = service("requestlogdemo", "1.32") { requestLogging{ context => startup { request { state => path("/foo") { contentType(applicavon/json) { get { request => ... } } } } } } “requestLog” секция: "enabled = true | false" ( default = true ) "fields = see W3C Extended Log format" "roll = "never" | "hourly" | "daily" | "sunday" | "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" " ( default = "never") "file = path to log file" "writeDelaySeconds = delay between flush to file" ( default = 1 )
18.
Health Monitor • /blueeyes/services/[serviceName]/
v[serviceMajorVersion]/health trait HealthMonitorDemo extends BlueEyesServiceBuilder { val healthMonitorService = service("healthmon", "1.32") { healthMonitor { monitor => context => request { state => path("/foo") { contentType(applicavon/json) { get { request => monitor.vme(".requests.foo.vming") { ... } } } } } } }
19.
HdpClient • HdpClient • HdpClientXLightWebEngines val responseFuture = client.get("hdp://myservice.com/foo") responseFuture map {response => response.content.get} def myService: HdpClient[JValue] = client.path("hdp://
myservice.com/").contentType[JValue](applicavon/json) val responseFuture = myService.get("api/v1") responseFuture map {response => response.content.get}
20.
Тестирваоние • Полная потдержка Scala Specs • Не требует старта сервера
21.
Пример простого теста class EmailServicesSpec extends BlueEyesServiceSpecifica]on with
EmailServices { "EmailService" should { "get emails" in { val f = service.contentType[JValue](applicavon/json).get("/emails") f.value must eventually(beSomething) val response = f.value.get response.status mustEqual(HdpStatus(OK)) } } }
22.
Запуск сервиса object AppServer extends BlueEyesServer with EmailServices with OrderProcessingServices with LoginServices with
CatalogServices val startFuture = AppServer .start val stopFuture = AppServer .stop java ‐jar appserver.jar ‐‐configFile /etc/default/appserver.conf
23.
Данные • Библиотека JSON
24.
MongoDB • BlueEyes MongoDB QL • Потдержка Mock MongoDB
Descargar ahora