Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
Ни один современный продукт не обходится без API. Этот API может быть внешним, для публичного использования, а может быть сугубо внутренним, но требования к созданию расширяемого, версионируемого, тестируемого, документированного программного интерфейса очень похоже. В этом докладе мы поговорим о том, как создавать подобные API на основе REST, какие существуют best-practices, чего следует избегать, на что обращать внимание при проектировании.
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Yulia Tsisyk
Доклад с митапа MSK .NET Community (http://mskdotnet.org).
В современном мире уже нельзя писать код, который работает на одном компьютере на одном процессорном ядре и имеет монопольный доступ к данным. Опытом борьбы с трудностями при написании многопоточного кода поделится Никита Цуканов.
Доклад "Параллелизм и распределённые вычисления на акторах с Akka.NET" рассчитан на неподготовленного слушателя, ранее не имевшего дело с акторами, и является улучшенной и дополненной версией доклада с питерского DotNext. 11 августа речь пойдёт непосредственно об акторной модели и её реализации в Akka.NET, особенностях юнит-тестирования, акторах с сохраняемым состоянием, а так же об интеграции всей этой машинерии с имеющимся приложением и ASP.NET.
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ontico
РИТ++ 2017, AppsConf
Зал Найроби + Касабланка, 5 июня, 11:00
Тезисы:
http://appsconf.ru/2017/abstracts/2584.html
Большинство современных мобильных приложений так или иначе работает с каким-то API (а зачастую и не с одним). Количество запросов при этом может достигать десятков в минуту и понимание того, что сейчас происходит в сетевом слое вашего приложения, становится непростой задачей.
Я расскажу и покажу весь диапазон современных средств для мониторинга и отладки сетевых запросов: от самых простых до узкоспециальных - с плюсами/минусами каждого из инструментов и областями их применения.
Многофункциональный сервер приложений, обеспечивающий среду запуска на одном сервере и группе серверов, дающий полный набор инструментов для создания прикладного программного обеспечения.
Как автоматизировать тестирование WebApi, даже если проект завязан на внешние сервисы. Как тестировать WebApi-сервер без постоянных деплоев, как дебажить во время прогона интеграционных тестов.
Видео https://www.youtube.com/watch?v=fuS1IaLSGV0
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
Ни один современный продукт не обходится без API. Этот API может быть внешним, для публичного использования, а может быть сугубо внутренним, но требования к созданию расширяемого, версионируемого, тестируемого, документированного программного интерфейса очень похоже. В этом докладе мы поговорим о том, как создавать подобные API на основе REST, какие существуют best-practices, чего следует избегать, на что обращать внимание при проектировании.
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Yulia Tsisyk
Доклад с митапа MSK .NET Community (http://mskdotnet.org).
В современном мире уже нельзя писать код, который работает на одном компьютере на одном процессорном ядре и имеет монопольный доступ к данным. Опытом борьбы с трудностями при написании многопоточного кода поделится Никита Цуканов.
Доклад "Параллелизм и распределённые вычисления на акторах с Akka.NET" рассчитан на неподготовленного слушателя, ранее не имевшего дело с акторами, и является улучшенной и дополненной версией доклада с питерского DotNext. 11 августа речь пойдёт непосредственно об акторной модели и её реализации в Akka.NET, особенностях юнит-тестирования, акторах с сохраняемым состоянием, а так же об интеграции всей этой машинерии с имеющимся приложением и ASP.NET.
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ontico
РИТ++ 2017, AppsConf
Зал Найроби + Касабланка, 5 июня, 11:00
Тезисы:
http://appsconf.ru/2017/abstracts/2584.html
Большинство современных мобильных приложений так или иначе работает с каким-то API (а зачастую и не с одним). Количество запросов при этом может достигать десятков в минуту и понимание того, что сейчас происходит в сетевом слое вашего приложения, становится непростой задачей.
Я расскажу и покажу весь диапазон современных средств для мониторинга и отладки сетевых запросов: от самых простых до узкоспециальных - с плюсами/минусами каждого из инструментов и областями их применения.
Многофункциональный сервер приложений, обеспечивающий среду запуска на одном сервере и группе серверов, дающий полный набор инструментов для создания прикладного программного обеспечения.
Как автоматизировать тестирование WebApi, даже если проект завязан на внешние сервисы. Как тестировать WebApi-сервер без постоянных деплоев, как дебажить во время прогона интеграционных тестов.
Видео https://www.youtube.com/watch?v=fuS1IaLSGV0
Rambler.iOS #2: Практика применения BaaS в мобильных сервисахRAMBLER&Co
Rambler.iOS #2: Практика применения BaaS в мобильных сервисах (Чугунов Роман)
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией Rambler&Co.
Пользователь точно оценит! Повышение производительности мобильных приложений ...Ontico
Расскажем о методиках создания производительных приложений, опираясь на собственный многолетний опыт проб и ошибок:
• использование инструментов отладки (работа с Hierarchy Viewer; поиск и устранение overdraw; профилирование методов; поиск утечек памяти);
• написание производительного кода;
• создание верстки, повышающей скорость работы приложений;
• создание требований к дизайну интерфейсов и API с оглядкой на производительность;
• использование аналитики для логирования и отладки багов.
Android-приложения Superjob:
• 3 приложения в Google Play для B2C и B2B-аудиторий;
• более 1 млн. пользователей;
• в числе лучших российских приложений по мнению Google Play.
* Почему Angular 2 такой быстрый и как его ускорить еще сильнее?
* Как работает Change Detection механизм и как им управлять?
* Зачем нам Zone.js и Функциональное Реактивное Программирование?
* Как работать с Redux и Mobx в Angular 2 и что можно от этого выиграть?
Об этом и ряде других вещей вы узнаете из этого доклада.
There is a problem of finding the best instance of a service in distributed systems with dynamic configuration. Nowadays, there are many products for the configuration storage and service discovery. It should be mentioned at least Netflix Eureka, Consul, etc or good old Zookeeper. These products can keep and give configuration, manage service instances lifecycle and some of them even can be as dynamic DNS service. But main question is not about what instance may be called at the certain time. It is about what instance is better for call? This means that smart load balancing top on service discovery is required. Spring Cloud project allows to integrate these products to your project and provides powerful solutions for typical problems, that make cloud native services developing easier. This talk will review the internal structure of SpringCloud implementation of Client-Side Service Discovery and Client Load Balancing patterns. It also will include specific details of concrete implementations with examples from official libraries and the author’s own library.
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"Fwdays
Доклад посвящен замечательному JS-фреймворку — Riot.js (11k звезд на GitHub), который реализует идею Web Components в простом и компактном виде, пропагандируя принципы простоты и Native JavaScript.
Riot.js позволяет по-новому взглянуть на JS-фреймворки, которые в наше время стали увесистыми титанами с собственной экосистемой, знание которых совсем не означает владение JavaScript.
Мы поговорим об устройстве фреймворка, его отличиях, о библиотеках, разработанных сообществом, а также об архитектуре Riot.js приложений и лучших практиках.
Надеюсь, для кого-то мой доклад станет глотком свежего воздуха и популяризирует Riot.js фреймворк в украинском JS-комьюнити.
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
Антон Кириллов, Zeptolab (Москва)
Доклад посвящен обзору ключевых технологий стека Typesafe и анализу ключевых преимуществ и недостатков на примере реального проекта:
* Действительно ли Scala - “более лучшая” Java? Что следует знать, начиная внедрять Scala.
* Play Framework: больше чем просто контейнер. Архитектура и возможности.
* Доступ к базам данных: библиотеки и подходы, эволюция схемы БД во времени
* Actors: безболезненная многопоточность!
* Simple Build Tool: не совсем simple, но крайне функциональный инструмент автоматической сборки.
Рассматриваемые технологии позволяют “из коробки” начать создавать прототипы веб-приложений за очень короткое время и в дальнейшем наращивать их функционал. Тем не менее, из-за молодости стека существует большое количество “граблей”, о которых следует знать, принимая решение об использовании данного набора технологий.
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр КовалевPositive Hack Days
1. Сложности при распутывании перекрёстных и вложенных зависимостей.
2. Пакетный менеджер CrossPM. Его возможности и примеры использования.
3. Интеграция CrossPM и системы хранения пакетов Artifactory.
Платформа ASP.NET стоит на пороге глобальных изменений. Какие из них самые важные? Как они повлияют на процесс разработки? Стоит ли бояться и как подготовиться? В рамках доклада мы обсудим новый виток развития технологии и возможности, которые появятся у нас с выходом ASP.NET 5(vNext) и Visual Studio 2015.
В темные времена доминации Internet Explorer на рынке браузеров, тестировщик оставался один на один с тестируемым приложением, и лишь усердие, трудолюбие и крепкий алкоголь могли спасти его от безумия и профессионального выгорания.
К счастью, времена изменились. Современные браузеры скрывают в себе множество полезных функций и имеют тысячи плагинов, способных помочь тестировщику веб приложений. Я расскажу вам о браузерных плагинах, которые значительно облегчили тестирование верстки, поизводительности, отзывчивости сайта, позволили мне ускорить выполнение рутинных задач, а также повысили личную эффективность.
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"MskDotNet Community
Поговорим что такое React и зачем он нужен разработчикам, разберемся что такое ReactJS.NET и JavaScriptServices,
Обсудим как интегрировать React компоненты в существующую Razor разметку или даже в WebForms. Расскажем о том какие проблемы с производительностью существуют при серверном рендеринге компонентов и как их решать.
QA Fes 2016. Александр Неделяев. Система мониторинга производительности своим...QAFest
Как известно, то, что не может быть измерено, не может быть улучшено.
В своем докладе я расскажу вам о том, как с помощью open source инструментов можно построить систему мониторинга производительности приложения, а также представить полученные данные в доступной и наглядной форме. А технология контейнеров Docker поможет сделать это максимально быстро и просто.
Rambler.iOS #2: Практика применения BaaS в мобильных сервисахRAMBLER&Co
Rambler.iOS #2: Практика применения BaaS в мобильных сервисах (Чугунов Роман)
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией Rambler&Co.
Пользователь точно оценит! Повышение производительности мобильных приложений ...Ontico
Расскажем о методиках создания производительных приложений, опираясь на собственный многолетний опыт проб и ошибок:
• использование инструментов отладки (работа с Hierarchy Viewer; поиск и устранение overdraw; профилирование методов; поиск утечек памяти);
• написание производительного кода;
• создание верстки, повышающей скорость работы приложений;
• создание требований к дизайну интерфейсов и API с оглядкой на производительность;
• использование аналитики для логирования и отладки багов.
Android-приложения Superjob:
• 3 приложения в Google Play для B2C и B2B-аудиторий;
• более 1 млн. пользователей;
• в числе лучших российских приложений по мнению Google Play.
* Почему Angular 2 такой быстрый и как его ускорить еще сильнее?
* Как работает Change Detection механизм и как им управлять?
* Зачем нам Zone.js и Функциональное Реактивное Программирование?
* Как работать с Redux и Mobx в Angular 2 и что можно от этого выиграть?
Об этом и ряде других вещей вы узнаете из этого доклада.
There is a problem of finding the best instance of a service in distributed systems with dynamic configuration. Nowadays, there are many products for the configuration storage and service discovery. It should be mentioned at least Netflix Eureka, Consul, etc or good old Zookeeper. These products can keep and give configuration, manage service instances lifecycle and some of them even can be as dynamic DNS service. But main question is not about what instance may be called at the certain time. It is about what instance is better for call? This means that smart load balancing top on service discovery is required. Spring Cloud project allows to integrate these products to your project and provides powerful solutions for typical problems, that make cloud native services developing easier. This talk will review the internal structure of SpringCloud implementation of Client-Side Service Discovery and Client Load Balancing patterns. It also will include specific details of concrete implementations with examples from official libraries and the author’s own library.
Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"Fwdays
Доклад посвящен замечательному JS-фреймворку — Riot.js (11k звезд на GitHub), который реализует идею Web Components в простом и компактном виде, пропагандируя принципы простоты и Native JavaScript.
Riot.js позволяет по-новому взглянуть на JS-фреймворки, которые в наше время стали увесистыми титанами с собственной экосистемой, знание которых совсем не означает владение JavaScript.
Мы поговорим об устройстве фреймворка, его отличиях, о библиотеках, разработанных сообществом, а также об архитектуре Riot.js приложений и лучших практиках.
Надеюсь, для кого-то мой доклад станет глотком свежего воздуха и популяризирует Riot.js фреймворк в украинском JS-комьюнити.
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
Антон Кириллов, Zeptolab (Москва)
Доклад посвящен обзору ключевых технологий стека Typesafe и анализу ключевых преимуществ и недостатков на примере реального проекта:
* Действительно ли Scala - “более лучшая” Java? Что следует знать, начиная внедрять Scala.
* Play Framework: больше чем просто контейнер. Архитектура и возможности.
* Доступ к базам данных: библиотеки и подходы, эволюция схемы БД во времени
* Actors: безболезненная многопоточность!
* Simple Build Tool: не совсем simple, но крайне функциональный инструмент автоматической сборки.
Рассматриваемые технологии позволяют “из коробки” начать создавать прототипы веб-приложений за очень короткое время и в дальнейшем наращивать их функционал. Тем не менее, из-за молодости стека существует большое количество “граблей”, о которых следует знать, принимая решение об использовании данного набора технологий.
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр КовалевPositive Hack Days
1. Сложности при распутывании перекрёстных и вложенных зависимостей.
2. Пакетный менеджер CrossPM. Его возможности и примеры использования.
3. Интеграция CrossPM и системы хранения пакетов Artifactory.
Платформа ASP.NET стоит на пороге глобальных изменений. Какие из них самые важные? Как они повлияют на процесс разработки? Стоит ли бояться и как подготовиться? В рамках доклада мы обсудим новый виток развития технологии и возможности, которые появятся у нас с выходом ASP.NET 5(vNext) и Visual Studio 2015.
В темные времена доминации Internet Explorer на рынке браузеров, тестировщик оставался один на один с тестируемым приложением, и лишь усердие, трудолюбие и крепкий алкоголь могли спасти его от безумия и профессионального выгорания.
К счастью, времена изменились. Современные браузеры скрывают в себе множество полезных функций и имеют тысячи плагинов, способных помочь тестировщику веб приложений. Я расскажу вам о браузерных плагинах, которые значительно облегчили тестирование верстки, поизводительности, отзывчивости сайта, позволили мне ускорить выполнение рутинных задач, а также повысили личную эффективность.
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"MskDotNet Community
Поговорим что такое React и зачем он нужен разработчикам, разберемся что такое ReactJS.NET и JavaScriptServices,
Обсудим как интегрировать React компоненты в существующую Razor разметку или даже в WebForms. Расскажем о том какие проблемы с производительностью существуют при серверном рендеринге компонентов и как их решать.
QA Fes 2016. Александр Неделяев. Система мониторинга производительности своим...QAFest
Как известно, то, что не может быть измерено, не может быть улучшено.
В своем докладе я расскажу вам о том, как с помощью open source инструментов можно построить систему мониторинга производительности приложения, а также представить полученные данные в доступной и наглядной форме. А технология контейнеров Docker поможет сделать это максимально быстро и просто.
Development Lifecycle: From Requirement to ReleaseJulie Meloni
This presentation was given as part of the User Experience (UX) community update series of meetings in the University of Virginia Library. For more information: http://bit.ly/dLbaXO
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
Рассказ об основных принципах, которых придерживается Viber в длительной разработке приложения с большой кодовой базой — если разработкой занимается распределённая команда. Мы обсудим используемые технологии, библиотеки, работу с кодом и многое другое.
Сегодня многие фреймворки, такие как Prism или Autofac, позволяют разработчику организовать модульную структуру приложения. При этом часто бывает непонятно, для чего ещё нужны модули, кроме как для пресловутой "красоты архитектуры".
В рамках доклада я расскажу о том, какие существуют подходы к организации модульной структуры, в каких фреймворках они реализованы и для решения каких задач дает преимущество каждый подход.
Видео с доклада: http://getdev.net/Event/asp-net-mvc-4
Доклад об ASP.NET MVC, откуда и зачем он появился, какие задачи решает, какой подход к разработке исповедует. Этот доклад больше пригодится тем, кто хочет углубить и структурировать свои знания об ASP.NET MVC
Разработка мобильного и веб интерфейса для CachéInterSystems CEE
Клиент, сервер и их взаимодействие, разработка веб и мобильных приложений, Лебедюк Эдуард /
Client & server overview & communication between them, how to develop mobile apps based on existing webapp, Eduard Lebedyuk
Презентация с Открытого семинара . Ведущий — Евгений Романовский, инженер-программист веб-студии СКБ Контур. Видео с выступления доступно тут http://it-eburg.com/text/article/opyt_raboty_s_freimvorkom_aspnet_mvc/
Доклад от Parallels:
Методики тестировния производительности database-centric приложений
Описание: При работе над сложными продуктами в database-centric приложениях изменения в коде и тем более в SQL запросах к базе данных могут приводить к неожиданным падениям производительности или же деградации производительности приложения с ростом размера базы данных. Поэтому важно уметь как можно быстрее отлавливать и исправлять причины таких деградаций.
Доклад о том, как устроен процесс мониторинга производительности продукта автоматизации хостинга и облачных сервисов Parallels Automation, для которого определяющим фактором является производительность базы данных.
Компания покажет, как анализирует планы исполнения SQL запросов внутри PostgreSQL, как проверяет насколько быстро и эффективно в целом работают SQL запросы, как определяет стратегию дальнейшей оптимизации.
Построение собственного JS SDK — зачем и как?buranLcme
Многие разработчики любят делать свои велосипеды, но не все задумываются зачем. Мы расскажем о том, зачем вам может понадобится собственный JavaScript SDK и полезно ли кататься на велосипедах.
Мы делали собственный JS SDK для того, чтобы дать возможность создания плагинов в рамках большой enterprise системы - <b>Parallels Automation</b> и <b>Plesk Panel</b>. Сам SDK является частью общего стандарта <b>APS</b>, который является шиной, объединяющей все наши продукты по автоматизации. Обе панели брендируются и мы должны были сохранить брендинг при уже существующей кодовой базе верстки и существующих правилах оформления. И главное - надо было дать возможность создания UI сторонним девелоперам, которые могут иметь абсолютно разный уровень - от пришедших бекэндеров до профессиональных js-разработчиков.
Владимир Никонов "Вызовы при разработке enterprise продукта"Fwdays
В докладе мы рассмотрим этапы развития приложения, начиная от монолитного Web приложения, до распределенной платформы по управлению бизнес-процессами. Покажем этапы развития, задачи и вызовы, которые возникали на каждом их них. Проанализируем различные аспекты, влияющие на развитие архитектуры, такие как бизнес-требования, технологические тренды и возможные ограничения.
Automation Functional Testing in Agile ProjectsAndrey Rebrov
Об автоматических тестах писал ещё Сам Кент Бек. Ну, а автоматические функциональные тесты — это вообще лакомый кусок для современных agile методик разработки ПО. Вместе с участниками кемпа мы узнаем, с какой стороны подходить к процессу автоматизации тестирования в целом. Кроме того, мы создадим проект автотестирования с использованием одного из самых популярных продуктов для тестирования веб-приложений — Selenium 2.
Similar to RESTful API: Best practices, versioning, design documentation (20)
Доклад с митапа MSK .NET Community (http://mskdotnet.org).
Поговорим о самом мощном отладчике для Windows – WinDbg. Разберем как начать использовать этот отладчик, чем он может быть полезен для .NET разработчиков. Подробней остановимся на практических моментах его применения, зачем он прикладным программистам, web-разработчикам. Посмотрим и на другие инструменты отладки, которые занимают нишу между интуитивно управляемым комбайном Visual Studio и легким, но крайне аскетичным WinDbg.
RESTful API: Best practices, versioning, design documentation
1. Topic RESTful API
Best practices, versioning, design
documentation
Speaker Vyacheslav Mikhaylov (vmikhaylov@dataart.com)
SPB .NET Meetup #8
1
2. О чем доклад?
• Что такое API и зачем он нужен?
• Основы REST
• На чем реализовывать?
• Бест-практики
• Как проектировать?
• Документация и версионирование
2
4. Почему хороший API это важно?
• Простота использования и поддержки
• Конверсия в среде разработчиков (потребителей).
• Больше бользователей API -> выше популярность сервиса
• Лучше структура -> лучше изоляция компонентов
• API это UI для разработчиков
4
5. Какие виды API бывают?
• Web service APIs
• XML-RPC and JSON-RPC
• SOAP
• REST
• WebSockets APIs
• Library-based APIs
• Java Script
• Class-based APIs
• C# API, Java
• OS function and routines
• Access to file system
• Access to user interface
• Object remoting APIs
• CORBA
• .Net remoting
• Hardware APIs
• Video acceleration (OpenCL…)
• Hard disk drives
• PCI bus
• …
5
6. Какие виды API нас интересуют?
Web service APIs
• XML-RPC and JSON-RPC
• SOAP – Simple Object Acces Protocol
• REST
6
8. Принципы REST?
• Клиент-серверная архитектура
• Любые данные являются ресурсом
• Любой ресурс имеет ID
• Ресурсы связаны между собой
• Используются стандартные методы HTTP
• Сервер не хранит состояние
8
9. Чем REST хорош?
• Он простой!
• Переиспользуем существующие стандарты
• REST базируется на HTTP => доступны все плюшки
• Кеширование
• Масштабирование
• Минимум накладных расходов
• Стандартные коды ошибок
• Очень хорошая распространённость (даже IoT)
9
10. Best-practices (независимые от технологий)
• SSL everywhere
• Documentation & Versioning
• POST, PUT should return data
• Filtering, sorting, pagination
• Support MediaType
• Pretty print & gzip
• Standard caching by ETag & Last-Modified
• Use standard error codes and predefined error format
10
11. Свойства HTTP методов
11
HTTP Method Idempotent Safe
OPTIONS Yes Yes
GET Yes Yes
HEAD Yes Yes
PUT Yes No
POST No No
DELETE Yes No
PATCH Yes No
12. Что такое RESTful API?
Это такой сервис, который
удовлетворяет принципам REST
12
13. Выбираем технологию
WCF Services
– webHttpBinding only(а зачем
тогда остальные?)
– Поддерживаются только HTTP
Get & POST (и все)
+ Разные форматы XML, JSON,
ATOM
Web Api
+ Очень простой
+ Open source
+ Все возможности HTTP
+ Все возможности MVC
+ Легкий (не жирный )
+ Тоже поддерживает кучу
форматов
13
14. Выбираем хостинг для WebApi
•ASP.NET MVC
•OWIN – Open Web Interface for .Net
•IIS
•Self-hosted
•Azure
14
15. Идея OWIN
• Это спецификация (не библиотека и не платформа)
• Устраняет сильную связанность веб приложения с реализацией
сервера
15
16. Katana – реализация OWIN от Microsoft
[assembly: OwinStartup(typeof (Startup))]
namespace RestApiDemo
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
}
}
}
16
17. Проектируем интерфейс
• Все ресурсы в REST существительные (множественное число)
• Корневые сущности API
• GET /stations - Все вокзалы
• GET /stations/123 - Информация по вокзалу с ID = 123
• GET /trains - Все поезда
• Зависимые сущности
• GET /stations/555/departures – поезда уходящие с вокзала 555
17
18. Простейший контроллер
[RoutePrefix("stations")]
public class RailwayStationsController : ApiController
{
[HttpGet]
[Route]
public IEnumerable<RailwayStationModel> GetAll()
{
return testData;
}
RailwayStationModel[] testData = /*initialization here*/
}
18
23. Примеры запросов REST
• GET /stations– получить все вокзалы
• GET /trains – расписание всех поездов
• GET /stations/555/arrivals
• GET /stations/555/departures
23
25. public static class TrainsFromControllerRoutes
{
public const string BasePrefix =
RailwayStationsControllerRoutes.BasePrefix +
"/{station:int}/departures";
public const string GetById = "{id:int}";
}
25
Константы для роутинга
27. Базовый CRUD
• POST – создать новую сущность
• POST /Stations – JSON описание сущности целиком. Действие добавляет новую сущность
в коллекцию
• Возвращает созданную сущность
• PUT – изменить сущность
• PUT /Stations/12 – Изменить сущность с ID = 12.
• Возвращает измененную сущность
• DELETE
• DELETE /Stations/12 – Удалить сущность с ID = 12.
27
28. Еще примеры CRUD
• POST /Stations – Добавляем вокзал
• POST /Stations/1/Departures – Добавляем информацию об отправлении с вокзала 1
• DELETE /Stations/1/Departures/14 – Удаляем запись об отправлении с вокзала 1
• GET /Stations/33/Departures/10/Tickets – Список проданных билетов для
отправления 10 с вокзала 33
28
29. Naming anti-patterns
• GET /Stations/?op=departure&train=11
• действия в query string
• GET /Stations/DeleteAll
• реальный пример из жизни :)
• борьба с кешированием
• POST /GetUserActivity
• пост нужен был из-за параметров запроса в body
• POST /Stations/Create
• действие указано в составе URL - избыточно
29
30. Проектируем API
• Как связаны сущности API с доменной моделью?
• Никак они не связаны
• Как проектировать API если это не CRUD
• Превращаем действия в команды на изменения
30
33. Bounded context (BC)
• Изолированный поддомен
• Независимы друг от друга
• Имеют независимые модели (разные)
• BC <= component
33
34. Aggregates
• Целостная (consistent) группа сущностей
• Цель – гарантироваться целостность и согласованность всех
объектов
• Aggregate root (AR) – самый «главный» объект в группе
• Все изменения только через AR
• Сущности из разных Aggregate Root не могут ссылаться друг на
друга
34
38. Примеры запросов
• PUT /hotels/555/rooms/105/attachedDevices – заменить всю
коллекцию привязанных устройств на новую
• POST /hotels/555/rooms/105/attachedDevices – привязать еще
одно устройство
• DELETE /hotels/12 – удалить описание отеля с ID = 12
• POST /hotels/123/reservations – создать новую резервацию в
отеле id=123
38
40. REST without PUT
• Change entity XXX => New COMMAND to change entity XXX
• Можно отслеживать статус выполнения
• Можно отменять команды (DELETE)
• Легко хранить историю изменений
• Пользователь сообщает о намерениях
40
41. Fine Grained VS Coarse Grained
• Много маленьких объектов
• Бизнес логика уходит на
сторону клиента
• Нужно знать как связаны
объекты
• Сложно делать локальные
изменения например
• POST /blogs/{id}/likes
• Нужно отслеживать состояние
на клиенте
• Большие объекты нельзя
сохранить частично
41
42. Версионирование
• Если вы однажды опубликовали контракт, то вы обязаны его
соблюдать
• Braking changes можно делать только при изменении версии
42
43. Подходы к версионированию
Type Sample Complexity
URL {host}/api/v2/… Minimum
Custom Header api-version:2 Average
Custom Accept Header Accept:application/vnd.trainmodel.v2+json Maximum
43
Набор правил, как одно приложение или компонет взаимодействует с другими.
И механизм, который обеспечивает это взаимодействие
Обычно это не про UI
Взаимодействие виде Software-to-software (Component)
RPC
RPC – это «remote procedure call», понятие очень старое, объединяющие древние, средние и современные протоколы, которые позволяют вызвать метод в другом приложении. XML-RPC – это протокол, появившийся в 1998, вскоре после появления XML. Изначально поддерживался Microsoft, но вскоре Microsoft полностью переключилась на SOAP и поэтому в .Net Framework мы не найдем классов для поддержки этого протокола. Несмотря на это, XML-RPC продолжает жить до сих пор в различных языках (особенно в PHP), видимо, заслужил любовь разработчиков своей простотой.
SOAP
SOAP также появился в 1998 году стараниями Microsoft. Он был анонсирован как революция в мире ПО. Нельзя сказать, что все пошло по плану Microsoft, было огромное количество критики из-за сложности и тяжеловесности протокола. В то же время были и те, кто считал SOAP настоящим прорывом. Сам же протокол продолжал развиваться и плодиться десятками новых и новых спецификаций, пока в 2003 года W3C не утвердила в качестве рекомендации SOAP 1.2, который и сейчас является последним. Семейство у SOAP получилось внушительное: WS-Addressing, WS-Enumeration, WS-Eventing, WS-Transfer, WS-Trust, WS-Federation, Web Single Sign-On
You do need rest )
«передача состояния представления» – и что? Что это такое? Ничего не понятно.
«представление данных в удобном для клиента формате»
Рой Филдинг в своей работе 2000го года. Мысль в том, что каждое обращние к сервису переводит клиентское приложение в новое состояние.
Позволяет запускать приложения на любой платформе, поддерживающей OWIN, без изменений.
Спецификация очень проста, это просто Dictionary из параметров и их значений. Базовые параметры определены в спецификации.
После подключения нескольких библиотек через NuGet достаточно такого кода, чтобы наш сервер «взлетел»
После подключения нескольких библиотек через NuGet достаточно такого кода, чтобы наш сервер «взлетел»
После подключения нескольких библиотек через NuGet достаточно такого кода, чтобы наш сервер «взлетел»
После подключения нескольких библиотек через NuGet достаточно такого кода, чтобы наш сервер «взлетел»
После подключения нескольких библиотек через NuGet достаточно такого кода, чтобы наш сервер «взлетел»
После подключения нескольких библиотек через NuGet достаточно такого кода, чтобы наш сервер «взлетел»
После подключения нескольких библиотек через NuGet достаточно такого кода, чтобы наш сервер «взлетел»
После подключения нескольких библиотек через NuGet достаточно такого кода, чтобы наш сервер «взлетел»