По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Чтобы начать наше знакомство с регулярными выражениями, давайте взглянем на них поближе. Регулярные выражения являются шаблоном, который выполняет сравнение последовательности текста слева направо. Выражние "регулярные выражения" используют не очень часто, чаще всего применяют "regex" либо "regexp". В общем и целом, регулярные выражения предназначены для изменения текста в строке, а также они выполняют проверку некоторых форм, и т.д. К примеру, у вас в разработке ведется некое приложение, и вам понадобилось выявить какие-то правила, по которым юзер уже будет выбирать собственное наименование. Важным условием будет ограничение в количестве символов и написании самого имени, которое должно состоять из букв, цифр, дефиса и нижнего подчеркивания. Для того, чтобы решить данную задачу, можно воспользоваться представленным ниже решением: john_doe; jo-hn_doe; john12_as. Но если наименование юзера будет состоять из прописной буквы, например Jo, то оно никак не будет соответствовать данному условию. Основные совпадения Регулярные выражения являются шаблоном, который состоит из неких символов, с помощью которого разработчики выполняют поиск в тексте. К примеру, условие "The" будет означать букву "t", за которой идет "h", затем - "e". "the" => The fat cat sat onthemat. Метасимволы Строительными блоками регулярных выражений являются метасимволы, которые являются независимыми, и обычно используются любыми способами. Некоторое количество из них могут иметь особое предназначение, поэтому они выделяются квадратными скобками. Ниже вы можете ознакомиться с метасимволами. Метасимволы Описание . Любой единичный символ, исключая новую строку. [ ] Поиск набора символов, помещенных в скобки. [^ ] Отрицательный класс символов. Соответствует любому символу, не заключенному в квадратные скобки. * 0 или больше повторений предшествующего символа. + 1 или больше повторений предшествующего символа. ? Делает предшествующий символ опциональным. {n,m} Возвращает как минимум "n", но не более "m" повторений предшествующего символа. (xyz) Находит группу символа в строго заданном порядке. | Разделяет допустимые варианты. Исключает следующий символ. Позволяет искать служебные символы [ ] ( ) { } . * + ? ^ $ | ^ Находит начало введенной строки. $ Находит конец введенной строки. Сокращения для обозначения символов В регулярных выражениях также существуют некоторые сокращения для символов, что в несколько раз повышает комфортность при работе. Ниже приведен список сокращений: Сокращение Описание . Любой символ, кроме новой строки w Соответствует буквенно-цифровым символам: [a-zA-Z0-9_] W Соответствует не буквенно-цифровым символам: [^w] d Соответствует цифрам: [0-9] D Соответствует нецифровым знакам: [^d] s Соответствует знаку пробела: [ f p{Z}] S Соответствует символам без пробела: [^s] Look Around Позиционная проверка Look Around представляет собой набор некоторых групп, которые предназначены для поиска в тексте, но сами в него не входят. Позиционная проверка используется в том случае, если в определенном условии существует шаблон, который либо предшествует, либо идет следующим. Символ Описание ?= Положительный Lookahead ?! Отрицательный Lookahead ?<= Положительный Lookbehind ? Отрицательный Lookbehind Флаги Флаги также часто называют модификаторами, так как они могут изменять выходные данные регулярного выражения. Флаги ниже являются неотъемлемой частью и могут использоваться в любом порядке или комбинации регулярных выражений. Флаг Описание i Нечувствительность к регистру: делает выражение нечувствительным к регистру. g Глобальный поиск: поиск шаблона во всей строке ввода. m Многострочность: анкер метасимвола работает в каждой строке. Жадные vs. ленивые выражения По умолчанию регулярные выражения выполняются благодаря "жадным" квантификаторам, им соответствует максимально длинная строка из всех возможных. "/(.*at)/" => The fat cat sat on the mat. Чтобы получить "ленивое" выражение, нужно использовать знак "?". Так будет получена максимально короткая строка. "/(.*?at)/" => The fat cat sat on the mat.
img
Сегодня рассмотрим установку малоизвестного аналога FreePBX под названием Wazo – отличий достаточно много, начиная от версии Linux (Debian), дистрибутив с которой можно скачать с официального сайта http://wazo.community и заканчивая крайне непривычным видом самого Web-интерфейса. Установка В первую очередь, необходимо создать виртуальную машину под скачанный дистрибутив корректной разрядности – то есть машина должна быть 64-битной, если вы скачали соответствующий дистрибутив и наоборот. Далее, выбираем образ, с которого машина будет грузиться (здесь все также как и прежде – никаких изменений) и запускаем машину. Далее будет предложено выбрать способ установки, выбираем просто Install: Далее появится возможность выбрать язык для установки – выбираем русский язык. Выбираем местоположение – страну или регион: Выбираем раскладку клавиатуры – нам нужна английская: Далее начинается загрузка дополнительных компонентов – придётся немного подождать. Дистрибутив Wazo «весит» совсем немного – около 400MB, однако, докачивает много файлов в процессе установки, и, конкретно в моём случае процесс установки получился очень длительным. Далее вводим пароль суперпользователя (пароль на пользователя root). Обязательно сгенерируйте его соответствующим требованиям безопасности. Затем выбираем часовой пояс, после чего начнётся установка базовой системы (на скриншотах ниже). Далее начинается процесс настройки менеджера пакетов (в случае Debian-систем используется apt-get, в отличие от привычного yum). Сначала выбираем страну расположения – логично также выбрать РФ, затем выбираем зеркало – я выбрал зеркало МИФИ: Оставляем пустым поле HTTP-прокси – в моём случае его заполнять не нужно. Сразу после этого будет довольно длительная процедура по настройке apt: Последним шагом необходимо выбрать диск для установки системного загрузчика – так как в моём случае Wazo устанавливается на простейшей виртуальной машине, то и диск один – его и выбираем. После этого появится последний прогресс-бар о продолжении процесса установки. Как только процесс завершится (у меня этот процесс занял около 30 минут) произойдет перезагрузка. Как только система загрузится, введите логин – root и пароль, который вы установили ранее. После чего, введите команду ipconfig для того, чтобы понять, какой адрес был присвоен IP-АТС. Кстати, в случае FreePBX пользователь видит IP - адрес сразу после входа на АТС. Далее заходим по адресу, который вы видите в выводе команды и продолжаем процесс первичной настройки. Выбираем язык – к сожалению, выбрать можем только между английским и французским. Далее нажимаем Next и сначала читаем, затем соглашаемся с лицензионным соглашением GNU GPL. После чего последовательно производим следующие настройки: Hostname - имя вашего сервера с АТС; Domain name - ваш домен; WebInterface root password - пароль суперпользователя для управления АТС через веб-интерфейс; Interface VoIP - адрес АТС и адрес шлюза по умолчанию; DNS servers -DNS сервер – я оставил данную настройку нетронутой; Затем будет неожиданное – настройка контекста внутренних вызовов, внешних и интервала нумерации: Entity - название вашей организации; Internal calls context - название контекста для внутренних вызовов и диапазон нумерации пользователей – позднее это можно будет изменить; Incalls context - контекст для прямых вызовов (DID) и их диапазон – я оставил данное поле незаполненным; Outcalls context - название контекста для исходящих вызовов; После нажатия на Next вы увидите всю введенную информацию (для подтверждения) ещё раз – необходимо нажать на кнопку Validate: Наконец-то можно начать пользоваться системой – но предварительно вы увидите экран, похожий на Dashboard у FreePBX – здесь есть информация о сетевых интерфейсах, железе, жёстком диске, запущенных серверах и плагинах. Попробовать что-то покрутить касаемо телефонной части можно нажав на кнопку Services и, затем, IPBX – тут можно управлять транками, пользователями и так далее. Заключение Решать нужна ли вам данная АТС – только вам, но мы настоятельно советуем попробовать её установить, так как определённое количество «фишек» у неё присутствует – о них и о подробной настройке данной АТС мы расскажем в следующих статьях.
img
Что такое API? Поскольку мы говорим про REST API, то наше определение API не будет сильно выходить за тематику сетей. Подробнее про API можно прочитать тут. API означает Application Programming Interface. API задает связь между программами для возможности передачи данных. То, что программа имеет API, подразумевает, что она передает часть своих данных для использования клиентом. Клиентом может быть фронтенд часть той же самой программы или другая внешняя программа. Для получения этих данных необходимо отправить структурированный запрос на API. Если запрос удовлетворят желаемым требованиям, то ответ, содержащий данные, будет отправлен туда откуда был сделан запрос. Обычно ответ представлен в формате JSON или XML. В некоторых случаях, для получения доступа к внешнему API, от вас может потребоваться авторизация. Каждый API имеет документацию, в которой говорится какие данные доступны и как структурировать свой запрос для получения правильного ответа. Примеры API Рассмотрим в качестве примера реальную ситуацию. Представьте посещение нового ресторана. Вы пришли, чтобы заказать еду, а поскольку вы здесь впервые, то точно не знаете какие блюда они подают. Официант дает вам меню, в котором можно выбрать, чтобы вы хотели съесть. После того, как выбор сделан, официант отправляется на кухню и приносит вам еду. В данном случае официант - это API, который обеспечивает вашу взаимосвязь с кухней. Документация API - это меню. Запрос выполняется в тот момент, когда вы отмечаете желаемые блюда, а ответ - это блюда, которые вам принесли. Что такое REST? REST означает REpresentational State Transfer (передача состояния представления). Это стандарт, который определяет форму и работу процессов, позволяющих нам взаимодействовать с данными на вебсерверах. Приведенное выше определение может выглядеть не так сложно или «профессионально», как то, что вы могли встретить в интернете, но главное, чтобы вы поняли основную цель REST API. API, который удовлетворяет некоторым или всем шести руководящим ограничениям REST считается RESTful. Мы можем взаимодействовать с серверами при помощи протокола HTTP. Благодаря этим протоколам мы можем Create (создавать), Read (читать), Update (обновлять) and Delete (удалять) данные – также известные как CRUD операции. Но каким образом мы можем выполнять CRUD операции и взаимодействовать с данными на сервере? Мы делаем это, посылая HTTP запросы, и это тот самый момент, когда REST начинает действовать. REST упрощает процесс взаимодействия с сервером, предоставляя различные HTTP методы/операции/команды, с помощью которых можно посылать запросы на сервер. Как взаимодействовать с сервером, используя REST API? Как мы уже обсуждали, REST API облегчает процесс взаимодействия с сервером, предоставляя нам различные методы HTTP запросов. Наиболее распространенные методы: GET: Метод get используется для Чтения данных с сервера. POST: Метод post используется для Создания данных. PATCH/PUT: Метод patch используется для Обновления данных. DELETE: Метод delete используется для Удаления данных. Эти методы предоставлены нам REST, что упрощает выполнение CRUD операций. Таким образом: Создать => POST Прочитать => GET Обновить => PATCH/PUT Удалить => DELETE Если мы хотим сделать запрос на сервер, например, для получения данных, то мы отправляем запрос GET на узел/источник данных на сервере. Узел данных аналогичен URL. Если запрос составлен корректно, то сервер отправит нам в ответ запрашиваемые данные. Также он отправит код состояния, где 200 - это успешное выполнение, а 400 - это ошибка пользователя. Пример запроса на JSONPlaceholder API, используя JavaScript: fetch('https://jsonplaceholder.typicode.com/todos/1') .then(response => response.json()) .then(json => console.log(json)) При выполнении запроса с использованием fetch API по умолчанию используется метод GET, поэтому мы можем не указывать его явно. Но мы должны будем это сделать при использовании других методов. В приведенном выше примере, узел данных - это https://jsonplaceholder.typicode.com, а запрашиваемые нами данные - это один элемент todo. Данные будет получены в JSON формате. Если бы мы использовали запрос POST, тогда бы мы использовали метод POST, а в теле запроса находились бы данные, которые мы создали для отправки на сервер. Для удаления нам потребуется использовать соответствующий запрос, содержащий id элемента todo, который мы хотим удалить. Например: fetch('https://jsonplaceholder.typicode.com/posts/3', { method: 'DELETE', }); Для обновления данных нужно, чтобы запрос содержал id и данные для обновления. Как в этом примере: fetch('https://jsonplaceholder.typicode.com/posts/5', { method: 'PATCH', body: JSON.stringify({ title: 'new todo', }), headers: { 'Content-type': 'application/json; charset=UTF-8', }, }) .then((response) => response.json()) .then((json) => console.log(json)); Заключение В этом руководстве вы узнали, что такое REST и как он помогает нам эффективно взаимодействовать с сервером. Мы дали определение API и рассмотрели пример, который помог объяснить его смысл. Мы также узнали некоторые методы REST для создания, чтения, обновления и удаления данных, хранящихся на сервере.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59