Артем Г.
Backend разработчик
Senior РНР разработчик, читай РНР гуру (более 8 лет опыта). Логика и спорт — идеальная основа этого парня
Телеграм есть у каждого. Все мы пользуемся этим мессенджером каждый день — он удобен и прост в использовании, интуитивно понятен, безопасен, и, конечно, все мы любим стикеры. Кроме личной переписки мы используем и групповые чаты — с семьей, с друзьями и коллегами.
Сегодня, в мире социальных медиа, каждый из нас использует десятки приложений и вебсайтов ежедневно. Oauth 2.0 призван упростить процесс авторизации и, как следствие, сделать жизнь пользователей проще и безопаснее. Возникает вопрос — каким образом?
Эта статья предназначена для ускорения и упрощения процесса освоения базовой функциональности инструмента Postman.
Компания позиционирует свой продукт как платформу для разработки API.
Но почему все любят платформу Postman?
— Это мощный инструмент для тестирования и разработки API, который в то же время имеет простой и интуитивно понятный интерфейс. Если вы впервые открываете эту программу и знаете разницу между POST и GET, то вы легко сможете отправить свой первый запрос. Однако есть несколько нетривиальных приемов, которые значительно облегчают жизнь.
Так что давайте’начнем (get postman app).
Мы ищем нужную кнопку (1) в верхней центральной части и создаем рабочее пространство (или выбираем из уже имеющихся, как делаю я). Понятие рабочее пространство включает в себя группировку ваших проектов — это может быть папка или рабочий стол, если вам так хочется.
После этого мы создаем рабочее пространство.
Затем мы нажимаем плюс (2) и создаем вкладку запроса.
<фигура>Все предельно просто, используя GET-запрос: задаем url, добавляем параметры (можно «включать» и «выключать» параметры), нажимаем send и видим ответ в нижней половине экрана (на сервере я просто возвращаю html-страницу и представляю все входящие параметры в формате json). Переключаясь между вкладками в области ответа, мы можем найти любую информацию и даже переключаться между представлениями и форматами вывода.
<фигура>Справа от кнопки "Отправить" находится кнопка Сохранить. При попытке сохранения, почтальон попросит вас указать/создать коллекцию. Коллекция - это группа запросов в рабочей области (отсортированная, например, по проекту). Я создал коллекцию test_collection. Мы сохраним ваш запрос в ней.
Давайте’ продолжим.
В Postman существует понятие окружения — это набор переменных, которым можно присвоить значение и использовать в процессе работы. Окружений может быть несколько (для продаж, для этапов, для разных версий — для чего угодно). Среда привязана к операционной среде: у каждой операционной среды есть своя среда postman.
Нажимаем на шестеренку в правом верхнем углу и создаем окружение.
<фигура>Я создал среду local_test_env с 2 переменными: host и username. Для значений переменных есть 2 колонки. Единственное отличие заключается в том, что если вы поделитесь своим проектом с командой, то значение из первого столбца будет общим, а запросы, которые вы делаете на своем ПК, будут использовать второй столбец. Синхронизация учетной записи postman также происходит из первого столбца.
Я обычно дублирую их — лучше взять за привычку заполнять все подряд, и заменять данные в случае необходимости.
Выбираем наше окружение как активное (есть выпадающий список слева от шестеренки).
Давайте’отправим POST с использованием переменных. Мы должны добавить вкладку и выбрать тип POST-запроса. Мы хотим использовать переменную host из нашего окружения. Переменные записываются в двойных фигурных скобках. Если мы поставим скобки и начнем писать имя переменной, то postman предложит нам выбрать переменную из текущего окружения. Давайте’выберем. Поскольку это POST-запрос, мы переходим на вкладку body (под адресной строкой) и добавляем параметр username, значением которого будет переменная a variable. Я добавил еще несколько параметров для наглядности, сервер вернет их сумму.
<фигура>Сервер вернул нам json-строку.
В Postman мы можем взаимодействовать с полученным результатом, программно отправлять запросы и писать тесты.
Мы открываем консоль с помощью комбинации cmd + alt + c (ctrl + alt + c для Windows). Я сделал один запрос и вижу его логи. Кроме того, вы можете вывести что-то в консоль следующей командой:
console.log("что-то")
Тесты пишутся на вкладке Tests. Я приведу несколько примеров простых тестов, а затем мы посмотрим, как с ними работать.
pm.test("Код состояния 200",function(){ pm.response.to.have.status(200);});
Это обычная анонимная функция. В данном случае мы говорим, что ответ должен иметь статус 200.
Благодаря тому, что мы получаем json-строку в ответе сервера, мы можем разобрать ее в переменную. Давайте сделаем это со следующей строкой:
var jsonData = pm.response.json();
Тогда мы используем новую переменную:
pm.test("контрольное число равно 9",function(){ pm.expect(jsonData.total).to.eql(9);});
В данном примере мы ожидаем, что total в jsonData будет эквивалентен 9.
А теперь давайте попробуем сравнить полученное значение поля «name» из jsonData с переменной username, которая есть в нашем окружении.
Вы можете получить переменную из окружения следующим образом:
pm.environment.get('username')
А теперь тест на эквивалентность:
pm.test("check name equal variable username",function(){ pm.expect(jsonData.name).to.eql(pm.environment.get('username'));});
В окружении можно не только читать, но и писать.
Мы пытаемся получить переменную "total" из окружения (ее там еще нет).
var sum = pm.environment.get('total');
Поскольку мы ничего не получили из окружения, то и в «сумме» ничего не будет. Мы создадим «total» в окружении и запишем туда значение, полученное из jsonData.total.
.if(!sum){ pm.environment.set('total', jsonData.total);}
А теперь давайте посмотрим, что получилось:
<фигура>Все тесты, кроме первого, прошли. Сервер возвращает нам код 201, в то время как мы ожидаем 200. Наша переменная находится в окружении, так что все работает.
А теперь, когда вы немного разобрались с postman, давайте попробуем отправить запрос, или скорее несколько.
Задача: отправить определенное количество запросов, каждый раз меняя параметр.
var digits = pm.environment.get('digits'); if(!digits){ digits =["2","4","5","22","13","6"];} console.log("digits: "+ digits); var CurrentDigit = digits.shift(); pm.environment.set('digit', currentDigit); pm.environment.set('digits', digits);
(Мы проверяем, есть ли в окружении переменная «digits», и создаем ее, если такой переменной нет. Мы выводим массив «цифр» в консоль перед запросом. Далее мы берем первый элемент из «цифр», удаляя значение из самого массива. И устанавливаем это значение в окружение для «digit» и «digits». В digits уже на один первый элемент меньше.)
На вкладке digit» в digits» вы можете установить значение.
На вкладке «Тесты» мы напишем следующее:
var digits = pm.environment.get('digits');var digit = pm.environment.get('digit'); console.log("сервер получил цифру = "+ pm.response.json().digit); if(digits && digits.length >0){ postman.setNextRequest("запрос цикла");}else{ postman.setNextRequest(null); console.log("stop"); pm.environment.unset("digits"); pm.environment.unset("digit");}
(Мы берем «digit» и «digits» из окружения и выводим некоторую информацию в консоль. Если «цифра» не пуста, мы задаем следующий запрос setNextRequest и передаем текущий запрос в качестве параметра. В противном случае мы говорим, что больше ничего делать не нужно, очищаем переменные окружения и выводим строку «stop» в консоль.)
После всего этого мы указываем на то, что в консоли не будет ничего сделано.
После всего этого мы открываем Runner (в левом верхнем углу), выбираем нашу новую коллекцию и наш запрос цикла, выбираем окружение и нажимаем Run loop.
<фигура>В бегуне мы видим, что выполнено 6 запросов.
<фигура>Затем открываем консоль и смотрим логи:
Мы протестировали некоторые из возможностей Postman’ на практике, убедившись, что это действительно очень удобная и многофункциональная платформа разработки, упрощающая процессы разработки и тестирования API.
Полную документацию можно найти здесь.
В PhpStorm есть возможность создавать Run/Debug Configurations и запускать их из IDE. Это позволяет участникам проекта делиться между собой общими конфигурациями, используя “Shared” флаг в настройках.
Бывают ситуации, когда проект на Symfony нуждается в роутинге, основанном на поддоменах. Например, когда в рамках одного проекта, одного репозитория присутствуют различные функциональные блоки.
3-го сентября состоялась очередная конференция PHP FrameworksDays. Она проводится каждый год осенью и собирает сотни участников из Украины, стран-соседей и ЕС. Спикерами выступают как опытные PHP-разработчики из украинских компаний, так и приглашенные англоязычные гости из разных стран.
Зачем нужны комментарии к программному коду? В каком виде их писать? Где они нужны, а где нет? Как правильно комментировать код? Как придерживаться одинакового стиля документирования всем участникам команды? Какие есть инструменты для генерации документации? В этой статье я постараюсь дать ответы на эти и другие вопросы, а также поделюсь своими мыслями по этому поводу. И поможет мне в этом кролик…
С момента выхода Symfony 2.0 процесс инсталляции и нужные для этого инструменты менялись и улучшались несколько раз. В данной статье мы рассмотрим, что нужно сделать для того, чтобы установить и настроить Symfony2-приложение.
Думаю, каждый, кто ищет что-то на GitHub, время от времени встречает репозитории, в которых в файле README после названия проекта идет куча разных бейджиков. Они выполняют роль приборной панели для репозитория и показывают, насколько далеко с таким кодом можно заехать. Когда пытаешься разобраться в этом разнообразии бейджиков — наступает хаос. Какие сервисы мне нужны? Что они делают? Как их подключить? Где взять рабочий конфиг? Где взять код для бейджика? Несколько раз наступив на одни и те же грабли, я решил потратить немного времени, чтобы в этом разобраться.
Во время работы над небольшим домашним проектом на Symfony2 у меня возникла потребность задеплоить его на стейджинг для тестирования API извне. Понятно, что для этого нужно иметь хостинг для сайта, т.е. либо уже располагать им, либо купить. Еще есть альтернатива в виде облачных сервисов, на которых можно разместить сайт бесплатно, но с ограниченными ресурсами. Подобных сервисов сейчас есть множество, и они конкурируют между собой. Я почему-то склонился к Heroku Cloud, я о нем слышал уже давно, и тут в нужный момент он всплыл в моей памяти.