Common Gateway Interface, CGI



Архитектура Web-приложений

Web-приложения представляют собой особый тип программ, построенных по архитектуре "клиент-сервер". Особенность: Web-приложение находится и выполняется на сервере - клиент при этом получает только результаты работы. Работа приложения основывается на получении запросов от пользователя (клиента), их обработке и выдачи результата. Передача запросов и результатов их обработки происходит через Интернет

Отображением результатов запросов, а также приемом данных от клиента и их передачей на сервер обычно занимается специальное приложениебраузер, результат, передаваемый сервером клиенту, должен быть представлен на этом языке.

URN — (англ. Uniform Resource Name), определяет глобальное имя ресурса независимо от его расположения.

URL — (англ. Uniform Resource Locator) определяет расположение ресурса.

URI –( Uniform Resource Identifier)универсальный идентификатор ресурса.

 

 

HTTP — (HyperText Transfer Protocol) широко распространённый протокол передачи данных, изначально предназначенный для передачи гипертекстовых документов.

Протокол HTTP предполагает использование клиент-серверной структуры передачи данных. Клиентское приложение формирует запрос и отправляет его на сервер, после чего серверное программное обеспечение обрабатывает данный запрос, формирует ответ и передаёт его обратно клиенту. После этого клиентское приложение может продолжить отправлять другие запросы, которые будут обработаны аналогичным образом.

Задача, которая традиционно решается с помощью протокола HTTP — обмен данными между пользовательским приложением, осуществляющим доступ к веб-ресурсам (обычно это веб-браузер) и веб-сервером. На данный момент именно благодаря протоколу HTTP обеспечивается работа Всемирной паутины.

Бра́узер— прикладное программное обеспечение для просмотра веб-страниц, содержания веб-документов, компьютерных файлов и их каталогов; управления веб-приложениями; а также для решения других задач. В глобальной сети браузеры используют для запроса, обработки, манипулирования и отображения содержания веб-сайтов.

Веб-сервер — сервер, принимающий HTTP-запросы от клиентов, обычно веб-браузеров, и выдающий им HTTP-ответы, как правило, вместе с HTML-страницей, изображением, файлом, медиа-потоком или другими данными.

Клиент, которым обычно является веб-браузер, передаёт веб-серверу запросы на получение ресурсов, обозначенных URL-адресами. Ресурсы — это HTML-страницы, изображения, файлы, медиа-потоки или другие данные, которые необходимы клиенту. В ответ веб-сервер передаёт клиенту запрошенные данные. Этот обмен происходит по протоколу HTTP.

2. Основные языки программирования. W3C. Языки разметки SGML, HTML, XML, RSS, KML. CSS.

Консо́рциум Всеми́рной паути́ны (англ. World Wide Web Consortium , W3 C) — организация, разрабатывающая и внедряющая технологические стандарты для Всемирной паутины. W3C разрабатывает для Интернета единые принципы и стандарты, которые затем внедряются производителями программ и оборудования. Таким образом достигается совместимость между программными продуктами и аппаратурой различных компаний, что делает Всемирную сеть более совершенной, универсальной и удобной.

Миссия W3C: «Полностью раскрыть потенциал Всемирной паутины, путём создания протоколов и принципов, гарантирующих долгосрочное развитие Сети».

SGML (англ. Standard Generalized Markup Language — стандартный обобщённый язык разметки) — метаязык, на котором можно определять язык разметки для документов.

Изначально SGML был разработан для совместного использования машинно-читаемых документов в больших правительственных и аэрокосмических проектах. Он широко использовался в печатной и издательской сфере, но его сложность затруднила его широкое распространение для повседневного использования.

Основные части документа SGML:

1. SGML-декларация — определяет, какие символы и ограничители могут появляться в приложении;

2. Document Type Definition — определяет синтаксисконструкций разметки. DTD может включать дополнительные определения, такие, как символьные ссылки-мнемоники;

3. Спецификация семантики, относится к разметке — также даёт ограничения синтаксиса, которые не могут быть выражены внутри DTD;

4. Содержимое SGML-документа — по крайней мере, должен быть корневой элемент.

Язык SGML предоставляет множество вариантов синтаксической разметки для использования различными приложениями. Изменяя SGML-декларацию, можно даже отказаться от использования угловых скобок, хотя этот синтаксис считается стандартным, так называемым concrete reference syntax.

Пример синтаксиса SGML:

<quote type="example">

typically something like <italics>this</italics>

</ quote >

HTML и XML произошли от SGML. HTML — это приложение SGML, а XML — это подмножество SGML, разработанное для упрощения процесса машинного разбора документа. Другими приложениями SGML являются SGML Docbook (документирование) и «Z Format» (типография и документирование).

XML - Extensible Markup Language, то есть Расширяемый Язык Разметки, возник в результате развития языка HTML (HyperText Markup Language, языка разметки гипертекста). По сути, язык XML представляет собой новое поколение языков разметки. Здесь следует иметь в виду 3 момента, принципиально отличающих XML от HTML и его предшественников (GML - Generalized Markup Language, SGML - Standard General Markup Language):

XML, в отличие от HTML, НЕ ИМЕЕТ ПРЕДОПРЕДЕЛЕННЫХ ТЭГОВ - точнее, каждый разработчик может создавать СВОИ СОБСТВЕННЫЕ XML-тэги - столько, сколько нужно. Количество таких тэгов практически неограничено. Таким образом, XML является метаязыком, позволяющим создавать другие языки разметки, такие как, например, HTML.

По мере развития языка HTML количество тэгов быстро увеличивалось. В конце концов их число достигло "критического значения". Более "умные" браузеры становятся и большими по объему, предъявляют все возрастающие требования к компьютерам, на которых они используются. Язык XML, не имеющий определенной заранее системы тэгов, позволяет решить эту проблему. "Платой" за универсальность является большая строгость оформления web-документов. Правила оформления XML-документов просты:

· недопустимы незакрытые контейнеры тэгов (но можно объединять открывающий и закрывающий тэги в одном, например: <br/>)

· "вложенные" контейнеры не могут "перекрываться"

· строчные и прописные буквы воспринимаются как разные символы

· в качестве названий тэгов нельзя использовать ключевые слова

· в названиях тэгов нельзя использовать пробелы, знаки пунктуации, круглые, квадратные и фигурные скобки

· знак подчеркивания (_) и цифры могут встречаться в названиях тэгов, но цифра не может быть перым символом названия тэга

· (При необходимости использовать несколько слов в качестве названия тэга их следует писать слитно, начиная каждое слово с большой буквы.)

Документы, отвечающие этим правилам, называются well-formed documents.

XML служит для ОПИСАНИЯ СТРУКТУРЫ ДАННЫХ, главным образом, ИЕРАРХИЧЕСКИХ СТРУКТУР.

Формат RSS

RSS - это формат, предназначенный для публикации новостей на новостных и подобных им сайтах, начиная от таких ведущих новостников Программы, умеющие работать с RSS, называются агрегаторами, и пользуются большой популярностью среди людей, которым нужна постоянно обновляемая информация и тех, кто ведет сетевые дневники. Программа-агрегатор позволяет собирать информацию воедино и одновременно отслеживать появление новых новостей на всех сайтах сразу, а также читать их краткое содержание, не посещая каждый сайт в отдельности. Среднестатистический агрегатор возьмет на себя всю ту работу, об огромном количестве которой мы сетовали в начале статьи.

KML (от англ. Keyhole Markup Language — язык разметки Keyhole) — язык разметки на основе XML для представления трёхмерных геопространственных данных в программе «Google Планета Земля» («Keyhole» до её приобретения «Google»).

CSS (англ Cascading Style Sheetsкаскадные таблицы стилей) — формальный язык описания внешнего вида документа, написанного с использованием языка разметки.

Преимущественно используется как средство описания, оформления внешнего вида веб-страниц, написанных с помощью языков разметки HTML и XHTML, но может также применяться к любым XML-документам

Такое разделение может увеличить доступность документа, предоставить большую гибкость и возможность управления его представлением, а также уменьшить сложность и повторяемость в структурном содержимом. Кроме того, CSS позволяет представлять один и тот же документ в различных стилях или методах вывода, таких как экранное представление, печатное представление, чтение голосом (специальным голосовым браузером или программой чтения с экрана), или при выводе устройствами, использующими шрифт Брайля.

3. Статические и динамические веб-страницы. Программирование на Javascript. W3C DOM. Средства отладки.


Статические - означает, что страница выглядит всегда одинаково, на зависимо от действий пользователя. Например, меню организованно ссылками на отдельные страницы, а не выпадающим списком.

  • Динамические html страницы
    Эти страницы уже могут реагировать на действия пользователя и изменяться. Например, при щелчке по тексту может показываться всплывающий блок текста с переводом слова

§ Динамика на веб страницах реализована при помощи скриптов, которые выполняются браузером.

§ По способу создания документы делят опять на статические и динамические.

§ Статическими называют страницы, если они лежат на сервере в html виде.
А динамическими называют те, которые генерируются "на лету" по запросу браузера.

 

 

 

DOM (от англ. Document Object Model — «объектная модель документа») — это независящий от платформы и языка программный интерфейс, позволяющий программам и скриптам получить доступ к содержимому HTML-, XHTML- и XML-документов, а также изменять содержимое, структуру и оформление таких документов.

Модель DOM не накладывает ограничений на структуру документа. Любой документ известной структуры с помощью DOM может быть представлен в виде дерева узлов, каждый узел которого представляет собой элемент, атрибут, текстовый, графический или любой другой объект. Узлы связаны между собой отношениями «родительский-дочерний».

Изначально различные браузеры имели собственные модели документов (DOM), несовместимые с остальными. Для обеспечения взаимной и обратной совместимости специалисты международного консорциума W3C классифицировали эту модель по уровням, для каждого из которых была создана своя спецификация. Все эти спецификации объединены в общую группу, носящую название «W3C DOM».

Ещё один интерфейс прикладного программирования, называемый «JDOM», обеспечивает более высокий, чем «W3C DOM», уровень для работы с XML-документами на Java.

Библиотеки jQuery, Dojo

 

 

 

РАЗДЕЛ 2

1. Универсальные скриптовые языки программирования. Основы Ruby. Базовые конструкции. Блоки. Массивы.

Скриптовый язык (англ. scripting language, также называют язык сценариев) – язык программирования, разработанный для записи «сценариев», последовательностей операций, которые пользователь может выполнять на компьютере. Простые скриптовые языки раньше часто называли языками пакетной обработки. Сценарии всегда интерпретируются, а не компилируются.

Сценарий (скрипт) – это программа, которая автоматизирует некоторую задачу, которую без сценария пользователь делал бы вручную, используя интерфейс программы.

Поскольку сценарии интерпретируются из исходного кода динамически при каждом исполнении, они выполняются обычно значительно медленнее готовых программ, оттранслированных в машинный код на этапе компиляции. Поэтому сценарные языки не применяются для написания программ, требующих оптимальности и быстроты исполнения. Но из-за простоты они часто применяются для написания небольших, одноразовых («проблемных») программ. Также, в плане быстродействия скриптовые языки можно разделить на языки динамического разбора (sh, command.com) и предварительно компилируемые (Perl).

Языки динамического разбора считывают инструкции из файла программы минимально требующимися блоками, и исполняют эти блоки, не читая дальнейший код.

Предкомпилируемые языки вначале считывают всю программу, компилируют её всю либо в машинный код, либо в какой-то внутренний формат, и лишь затем – исполняют получившийся код.

Ру́би — интерпретируемый язык программирования высокого уровня. Обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, «сборщиком мусора» и многими другими возможностями, поддерживающими много разных парадигм программирования, прежде всего классово-объектную.

 

 

 

 

2. Основы Ruby. Классы. Модули. Метапрограммирование.

 

 

Формально, мета-программирование – это набор практических приемов, которые позволяют частично генерировать код программы в run-time при помощи более простого кода.

Основу мета-программирования составляет интроспекция, это – возможность работать с внутренней структурой кода, как с переменными встроенных типов (просматривать, изменять, дополнять определение типов во время выполнения программы, динамически определять переменные и работать с ними и т.д.

Ruby – это один из самый ярких и практичных примеров реализации языка, поддерживающего эту технику. Вот несколько примеров того, как в Ruby поддерживается интроспекция:

1) Ruby предоставляет возможность дополнить описание типа, в примере ниже, в стандартный класс String мы добавили новый метод:

2) Ruby позволяет динамически определить новый тип и начать работать с ним незамедлительно:

3) Для любых типов Ruby позволяет динамически создавать методы, переменные класса и т.д.:

3. Ruby. Функциональный стиль программирования.

 

 

 

 

 

 

 

 

 

Раздел 3

 Принципы работы веб-серверов. Принципы построения веб-приложений. CGI. Фильтры и обработчики запросов. Переменные окружения. Передача параметров и файлов серверным модулям приложения.

Чтобы опубликовать веб-сайт, необходим либо статический, либо динамический веб-сервер.

Статический веб-сервер, или стек, состоит из компьютера ("железо") с сервером HTTP (ПО). Мы называем это «статикой», потому что сервер посылает размещенные файлы в браузер «как есть».

Динамический веб-сервер состоит из статического веб-сервера и дополнительного программного обеспечения, чаще всего сервера приложения и базы данных. Мы называем его «динамическим», потому что сервер приложений изменяет исходные файлы перед отправкой в ваш браузер по HTTP.

Например, для получения итоговой страницы, которую вы просматриваете в браузере, сервер приложений может заполнить HTML-шаблон данными из базы данных. Такие сайты, как MDN или Википедия, состоят из тысяч веб-страниц, но они не являются реальными HTML документами — лишь несколько HTML-шаблонов и гигантские базы данных. Эта структура упрощает и ускоряет сопровождение веб-приложений и доставку контента.

 

 

 

2. Создание веб-приложений в форме CGI и в форме шаблона со вставками. Ruby CGI, erb.

 

CGI (от англ. Common Gateway Interface — «общий интерфейс шлюза») — стандарт интерфейса, используемого для связи внешней программы с веб-сервером. Программу, которая работает по такому интерфейсу совместно с веб-сервером, принято называть шлюзом, хотя многие предпочитают названия «скрипт» (сценарий) или «CGI-программа». По сути позволяет использовать консоль ввода и вывода для взаимодействия с клиентом.

Сам интерфейс разработан таким образом, чтобы можно было использовать любой язык программирования, который может работать со стандартными устройствами ввода-вывода. Такими возможностями обладают даже скрипты для встроенных командных интерпретаторов операционных систем, поэтому в простых случаях могут использоваться даже командные скрипты.

Все скрипты, как правило, помещают в каталог cgi (или cgi-bin) сервера, но это не обязательно: скрипт может располагаться где угодно, но при этом большинство веб-серверов требуют специальной настройки. В веб-сервере Apache, например, такая настройка может производиться при помощи общего файла настроек httpd.conf или с помощью файла .htaccess в том каталоге, где содержится этот скрипт.

CGI является одним из наиболее распространённых средств создания динамических сайтов.

 

Common Gateway Interface, CGI

Технология Common Gateway Interface (CGI) в отличии от остальных рассматриваемых технологий является наиболее низкоуровневой. Кроме этого данная технология является стандартом интерфейса, который служит для связи внешней программы с WEB сервером.

Протокол CGI разработан таким образом, чтобы можно было использовать любой язык программирования, который работает со стандартными устройствами ввода/вывода. Так как данная возможность присутствует на уровне операционной системы, то, если не требуется сложный скрипт, его можно оформить в виде командного файла.

Основные достоинства и недостатки технологии CGI :

CGI не налагает особых условий на платформу, поэтому работает на всех популярных платформах и WEB серверах. Также технология не привязана к конкретному языку программирования и может быть использована на любом языке, работающем со стандартными потоками ввода/вывода.

Производительность программ CGI не очень высока. Основной причиной этого является то, что при каждом обращении к серверу создается отдельный процесс, требующий большого количества системных ресурсов. Кроме этого встроенных средств масштабируемости данная технология не предусматривает, и об этом разработчик должен заботиться отдельно.

CGI программа представляет из себя готовый к исполнению файл, что препятствует легкому расширению системы.

Данные причины привели к тому, что сейчас разработке приложений в технологии CGI предпочитают более развитые платформы, предоставляющие больше удобства разработчикам и обладающие повышенной производительностью. Тем не менее знание CGI необходимо для понимания работы высокоуровневых платформ.

3. Принципы построения веб-приложений с использованием Ruby. Rack, Sinatra, Ruby on Rails.

 

Sinatra — это минималистичный веб фреймворк написанный на Ruby, построенный на основе Rack. Sinatra отлично подходит для разработки простых сайтов и сервисов, где Rails будет слишком избыточным решением. Сами разработчики называют Sinatra — «Domain Specific Language for quickly creating web-applications in Ruby».В Sinatra, также, как и в Rails присутствуют запросы: get, post, put, delete, последние два эмулируются, так как браузеры их не поддерживают. В то время, когда в Rails правила маршрутизации (роутинга) хранятся в файле ./config/route.rb, в Sinatra роутинг описывается прямо в том, что я, с вашего позволения, назову контроллером. Выглядит роутинг примерно так:

<request> 'pattern' do # что-то тут делаемend

Конкретный пример:

#./app.rbrequire 'sinatra' get '/' do "Welcome to RubyDev.ru"end

rack — он создан для обеспечения минимального API для подключения веб-серверов, поддерживающих Ruby (WEBrick, Mongrel и т.д.) и ruby веб-фреймворками (Rails, Sinatra и др.).

Такие фреймворки, как например Sinatra, построены над Rack или у них есть rack-интерфейс, позволяющий серверам веб-приложений подключаться к ним.

Цель rack проста — он позволяет с легкостью обрабатывать HTTP-запросы.

HTTP — это простой протокол: в основном описывается формат данных, которые отправляются на сервер и которые возвращаются в клиенту. HTTP-запрос и HTTP-ответ имеют очень похожую структуру. HTTP-запрос — тройка, состоящая из пары метод-ресурс, набора заголовков и тела запроса, в то время как HTTP-ответ HTTP состоит из кода ответа, набора заголовков и опционального тела ответа.

Мэппинг Rack близок к этому. Rack-приложение — это ruby-объект, у которого есть метод call, принимающий единственный аргумент — environment, и возвращающий массив трех элементов: статус, заголовки и тело ответа.

Rack включает в себя обработчики и адаптеры. Первые соединяют его с ruby веб-серверами, вторые — связывают с фреймворками.

Используя middleware, можно изменить rack под нужды вашего приложения. Основная идея rack middleware — обработка запроса до того, как он попал в приложение, и обработка ответа перед возвратом его клиенту.

 

 

4. Шаблоны проектирования Ruby on Rails. Схема Model-View-Controller.

 

Все данные хранятся обычно в базе данных, причем надо отметить, что в приложении нет сильной привязки к СУБД. Когда клиент совершает некоторый запрос, его обрабатывает определенный для этого запроса метод в контроллере. Метод и контроллер выбираются на основе URI и HTTP метода запроса. Данный подход носит название REST (Representational State Transfer). Он гласит, что интерфейсы программирования приложения (API) должны давать доступ к независимым операциям [2]. В контроллере запрос проходит обработку, во время которой контроллер может обратиться к модели – объекту приложения, предоставляющего доступ к БД. Завершающей стадией является возвращение ответа контроллера клиенту. Ответ может быть представлен как в виде HTML страницы, так и в виде XML или JSON. В случае возвращения HTML страницы ее вид мы можем определить с помощью представления (View).

Архитектура, в основе которой лежат модель, представление и контроллер, получила название MVC (Model-View-Controller). MVC отделяет вид от модели, устанавливая между ними протокол взаимодействия «подписка/оповещение». При каждом изменении внутренних данных модель оповещает все зависящие от нее представления, в результате чего представление обновляет себя. Такой подход позволяет присоединить к одной модели несколько различных представлений [1]. Функции представления заключаются лишь в графическом представлении данных. Все изменения данных обрабатываются контроллером. Контроллер получает входные данные, выполняет операции над моделью и указывает представлению на необходимость обновления [3]. Большая часть логики приложения регулируется контроллером.

Роль контроллера в Rails выполняет класс, являющийся наследником класса ApplicationController. Его основными функциями являются поддержка сессии, фильтрация и кеширование. URI и HTTP метод ставятся в соответствие методу контроллера в файле /config/routes.rb. Метод контроллера может как вернуть представление, так и перенаправить на другой метод с некоторыми параметрами. Суперклассом каждого представления является класс ActionView. Представления хранятся в папке views, каждому представлению относится один файл. Формат файла и синтаксис могут различаться в зависимости от используемого языка разметки шаблона (erb или haml). Наиболее часто представление используются в качестве шаблонов (templates), макетов (layouts) или помощников форматирования (helpers). Модели расположены в папке models, каждая модель привязывается к определенной таблице БД.

Коснемся того, как в Ruby on Rails происходит обращение к данным. Модель и данные связываются с помощью паттерна Active Record (активная запись). Active Record – объект, выполняющий роль оболочки для строки таблицы или представления базы данных. Он инкапсулирует доступ к базе данных и добавляет к данным логику домена. Этот объект охватывает и данные и поведение. Большая часть его данных является постоянной и должна храниться в базе данных. В типовом решении Active Record используется наиболее очевидный подход, при котором логика доступа к данным включается в объект домена. В этом случае все знают, как считывать данные из базы данных и как их записывать в нее [3]. Реализация Active Record в Rails основана на том же подходе. Выше упоминалось, что в Rails нет сильной привязки к СУБД. Вы можете подключиться к базе данных, используя API, предоставляемый Active Record, который создает необходимый запрос непосредственно в движок БД при помощи адаптеров. У Active Record есть адаптеры для MySQL, Postgres, MS SQLServer, DB2, и SQLite. Необходимо лишь записать параметры доступа к БД в файле database. yml. С помощью статических методов класса модели можно выполнять базовые операции поиска и CRUD (Create Read Update Delete – Создание Чтение Обновление Удаление), кроме этого можно определить собственные методы, которые будут реализовывать некоторые фрагменты бизнес-логики приложения. Надо отметить интересную возможность Rails – ассоциации в Active Record, позволяющие декларативно выражать отношения между классами моделей. Велика роль валидаторов в Active Record. Они позволяют в декларативной форме объявлять допустимые состояния объектов модели. Процесс разработки упрощается также возможностями самого языка Ruby (например, methodchaining).

Идея, которая лежит в основе конструкционного шаблона MVC, очень проста: нужно чётко разделять ответственность за различное функционирование в наших приложениях:

 

Приложение разделяется на три основных компонента, каждый из которых отвечает за различные задачи. Давайте подробно разберём компоненты на примере.

Контроллер (Controller)

Контроллер управляет запросами пользователя (получаемые в виде запросов HTTP GET или POST, когда пользователь нажимает на элементы интерфейса для выполнения различных действий). Его основная функция — вызывать и координировать действие необходимых ресурсов и объектов, нужных для выполнения действий, задаваемых пользователем. Обычно контроллер вызывает соответствующую модель для задачи и выбирает подходящий вид.

Модель (Model)

Модель - это данные и правила, которые используются для работы с данными, которые представляют концепцию управления приложением. В любом приложении вся структура моделируется как данные, которые обрабатываются определённым образом. Что такое пользователь для приложения — сообщение или книга? Только данные, которые должны быть обработаны в соответствии с правилами (дата не может указывать в будущее, e-mail должен быть в определённом формате, имя не может быть длиннее Х символов, и так далее).

 

Модель даёт контроллеру представление данных, которые запросил пользователь (сообщение, страницу книги, фотоальбом, и тому подобное). Модель данных будет одинаковой, вне зависимости от того, как мы хотим представлять их пользователю. Поэтому мы выбираем любой доступный вид для отображения данных.

Модель содержит наиболее важную часть логики нашего приложения, логики, которая решает задачу, с которой мы имеем дело (форум, магазин, банк, и тому подобное). Контроллер содержит в основном организационную логику для самого приложения (очень похоже на ведение домашнего хозяйства).

Вид (View)

Вид обеспечивает различные способы представления данных, которые получены из модели. Он может быть шаблоном, который заполняется данными. Может быть несколько различных видов, и контроллер выбирает, какой подходит наилучшим образом для текущей ситуации.

Веб приложение обычно состоит из набора контроллеров, моделей и видов. Контроллер может быть устроен как основной, который получает все запросы и вызывает другие контроллеры для выполнения действий в зависимости от ситуации.

Самое очевидное преимущество, которое мы получаем от использования концепции MVC — это чёткое разделение логики представления (интерфейса пользователя) и логики приложения.

Поддержка различных типов пользователей, которые используют различные типы устройств является общей проблемой наших дней. Предоставляемый интерфейс должен различаться, если запрос приходит с персонального компьютера или с мобильного телефона. Модель возвращает одинаковые данные, единственное различие заключается в том, что контроллер выбирает различные виды для вывода данных.

Помимо изолирования видов от логики приложения, концепция MVC существенно уменьшает сложность больших приложений. Код получается гораздо более структурированным, и, тем самым, облегчается поддержка, тестирование и повторное использование решений.

 

5. Написание тестов веб-приложений. Unit test, RSpec, Selenium webdriver, тесты RoR.

Модульное тестирование, или юнит-тестирование (англ. unit testing) — процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы.

Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.

На самом базовом уровне RSpec является "Domain Specific Language" (DSL, то есть язык, который предназначенный для какой-то конкретной области), написанным на Ruby и предназначенным для тестирования приложений на Ruby. Вы можете использовать его, включив в проект гем rspec, который является пакетом, содержащим три гема - rspec-core, rspec-expectations и rspec-mocks.

По назначению Selenium WebDriver представляет собой драйвер браузера, то есть программную библиотеку, которая позволяет разрабатывать программы, управляющие поведением браузера.

По своей сущности Selenium WebDriver представляет собой:

 

· спецификацию программного интерфейса для управления браузером,

· референсные реализации этого интерфейса для нескольких браузеров,

· набор клиентских библиотек для этого интерфейса на нескольких языках программирования.

Так вот, Selenium WebDriver, или просто WebDriver – это драйвер браузера, то есть не имеющая пользовательского интерфейса программная библиотека, которая позволяет различным другим программам взаимодействовать с браузером, управлять его поведением, получать от браузера какие-то данные и заставлять браузер выполнять какие-то команды.

Исходя из этого определения, ясно, что WebDriver не имеет прямого отношения к тестированию. Он всего лишь предоставляет автотестам доступ к браузеру. На этом его функции заканчиваются.

6. Синхронный и асинхронный (AJAX) принципы построения веб-интерфейса. Языки и форматы обмена данными.

 

Технология AJAX расшифровывается не иначе как Асинхронный JavaScript и XML. Это и является главной особенностью технологии. В случае с асинхронной передачей данных браузер не перезагружает страницу и сам не подвисает во время ожидания ответа!

Асинхронную передачу включить легко - достаточно использовать параметр (как правило, третий по порядку) метода open(), где следует указать true (истинно). Соответственно, если поставить false, то браузер будет виснуть на время получения ответа от сервера, будь то лайк, рейтинг или ещё что. А представьте, что было до создания асинхронной передачи данных? На сервере сбой - страница зависла.

Включаем асинхронную передачу данных. Параметры open(метод передачи, действие-файл, асинхронно или синхронно).

Код JS (Ajax)


xmlhttp.open("GET","ajax.php",true);


Теперь отосланный запрос будет прорабатывать независимо от других сценариев на странице, а обрабатывать он будет только при получении. Получили ответ с сервера через 20 секунд? Ну вот тогда и обработали, а не зависаем.

Внимание! Синхронную передачу описываю только из приличия. В нашем случае (рассмотрение Ajax) это всё равно, что в 21 век въехать на телеге. Тем не менее, для этого в метод open() вставляем false:


xmlhttp.open("GET","ajax.php",false);


Если Вы всё-таки хотите использовать подобную модель, то старайтесь делать это только для небольших запросов. В случае больших запросов браузер зависает, а пользователь пугается и уходит со страницы или закрывает приложение - смотря где используете.

 

Особенность данной технологии - в том, что при её использовании не нужно обновлять всю страницу при первой же потребности. Ведь можно запросить новые данные только для её части. Это и удобно (ведь меньше времени приходится ждать), и экономично (для тех, у кого не безлимитный интернет). Правда, для информирования пользователя о происходящем обновлении желательно использовать хотя бы индикатор загрузки или текстовые сообщения, которые проинформируют про новые данные с сервера. В качестве минусов технологии часто упоминают тот факт, что она не поддерживается устаревшими и текстовыми браузерами. Да и возможность отключения технологии Javascript есть у пользователя, чем многие и пользуются. Поэтому не следует злоупотреблять AJAX. Что это может дать, если не предусмотреть альтернативные методы представления информации? В лучшем случае информация просто не будет отображена на сайте. В худшем – его внешний вид так пострадает, что пользователь на него больше не вернётся.

 

7. Хранение состояния на стороне браузера и на стороне сервера. Cookies, WebStorage, Sessions.

Web Storage (Веб-Хранилище) — это технология хранения данных на стороне клиента прямиком в браузере.

\Хранилище данных сеансов — это объект sessionStorage, используемый для хранения данных вида «Ключ - Значение» на временной основе. Данные хранятся до тех пор, пока не будет закрыта вкладка или окно браузера.

Управление состоянием на стороне сервера:

Параметры для хранения сведений о странице на стороне сервера обычно обеспечивают большую степень безопасности, чем параметры на стороне клиента, однако они могут использовать больше ресурсов веб-сервера, что может привести к проблемам с масштабируемостью, если объем сохраняемой информации слишком велик. ASP.NET предоставляет несколько параметров для реализации управления состоянием на стороне сервера.

Хранение информации на сервере имеет следующие преимущества:

1. Безопасность. Информация управления состоянием на клиенте может быть похищена с клиентского компьютера или перехвачена в пути, а также она уязвима к модификации злоумышленниками. Следовательно, ни в коем случае не используйте управление состоянием на клиенте для хранения конфиденциальной информации, такой как пароль, уровень доступа или состояние авторизации;

2. Снижение нагрузки на сеть. При транспортировке больших объемов данных состояния между клиентом и сервером создается значительная нагрузка на канал связи и увеличивается время загрузки страницы, что чревато ростом расходов и снижением масштабируемости. Пересылка больших объемов данных негативно сказывается на эффективности мобильных клиентов, обычно подключенных через медленные каналы связи. Следовательно, громоздкую информацию управления состоянием (более 1 Кб) лучше хранить на сервере.

Параметры управления состоянием на стороне сервера, поддерживаемые ASP.NET:

· Состояние приложения

· Состояние сеанса

· Свойства профиля

· Поддержка базы данных

Cookie

Ку́ки (англ. cookie, буквально — печенье) — небольшой фрагмент данных, отправленный веб-сервером и хранимый на компьютере пользователя. Веб-клиент (обычно веб-браузер) всякий раз при попытке открыть страницу соответствующего сайта пересылает этот фрагмент данных веб-серверу в составе HTTP-запроса. Применяется для сохранения данных на стороне пользователя, на практике обычно используется для[1]:

· аутентификации пользователя;

· хранения персональных предпочтений и настроек пользователя;

· отслеживания состояния сеанса[en] доступа пользователя;

· ведения статистики о пользователях.

Web Storage

Интернет-хранилище или DOM-хранилище (Document Object Model) — это программные методы и протоколы веб-приложения, используемые для хранения данных в веб-браузере. Интернет-хранилище представляет собой постоянное хранилище данных, похожее на куки, но со значительно расширенной ёмкостью и без хранения информации в заголовке запроса HTTP. Существуют два основных типа веб-хранилища: локальное хранилище (localStorage) и сессионное хранилище (sessionStorage), ведущие себя аналогично постоянным и сессионным кукам соответственно[1].

 

8. Способы обращения к базам данных. ORM (Object-relational mapping) в Ruby on Rails.

· Миграции - это удобный способ изменять схему вашей базы данных всё время неизменным и простым образом. Они используют Ruby DSL. Поэтому вам не нужно писать SQL вручную, позволяя вашей схеме быть независимой от базы данных.

· Каждую миграцию можно рассматривать как новую 'версию' базы данных. Схема изначально ничего не содержит, а каждая миграция модифицирует ее, добавляя или убирая таблицы, столбцы или записи. Active Record знает, как обновлять вашу схему со временем, перенося ее из определенной точки в прошлом в последнюю версию. Active Record также обновляет ваш файл db/schema.rb, чтобы он соответствовал текущей структуре вашей базы данных.

ORM (англ. Object-Relational Mapping, рус. объектно-реляционное отображение, или преобразование) — технология программирования, которая связывает базы данныхс концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных». Существуют как проприетарные, так и свободныереализации этой технологии.

Решение проблемы хранения данных существует — это реляционные системы управления базами данных. Использование реляционной базы данных для хранения объектно-ориентированных данных приводит к семантическому разрыву, заставляя программистов писать программное обеспечение, которое должно уметь как обрабатывать данные в объектно-ориентированном виде, так и уметь сохранить эти данные в реляционной форме. Эта постоянная необходимость в преобразовании между двумя разными формами данных не только сильно снижает производительность, но и создает трудности для программистов, так как обе формы данных накладывают ограничения друг на друга.

Реляционные базы данных используют набор таблиц, представляющих простые данные. Дополнительная или связанная информация хранится в других таблицах. Часто для хранения одного объекта в реляционной базе данных используется несколько таблиц; это, в свою очередь, требует применения операции JOIN для получения всей информации, относящейся к объекту, для её обработки.

9. Проблемы безопасности веб-приложений.

Безопасность веб-приложений — один из наиболее острых вопросов в контексте информационной безопасности. Как правило большинство веб-сайтов, доступных в Интернете, имеют различного рода уязвимости и постоянно подвергаются атакам. В статье будут рассмотрены основные угрозы информационной безопасности веб-приложений.



Дата добавления: 2020-04-25; просмотров: 555; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!