• Принципы построения REST JSON API

    • Tutorial

    Эта памятка писалась для внутренних нужд (открыть глаза менее опытным в вебе коллегам). Но, т.к. я насмотрелся велосипедов от довольно уважаемых, казалось бы, контор, — выкладываю на хабр. Мне кажется, многим будет полезно.


    Зачем


    Надеюсь, читающий уже понимает, зачем ему вообще нужен именно REST api, а не какой-нибудь монстр типа SOAP. Вопрос в том, зачем соблюдать какие-то стандарты и практики, если браузеры вроде бы позволяют делать что хочешь.


    • Стандарт HTTP это стандарт. Его несоблюдение вредно для кармы и ведёт к постоянным проблемам с безопасностью, кэшированием и прочими "закидонами" браузеров, которые совсем не закидоны, а просто следование стандарту.
    • Велосипеды со всякими {error: "message","result":...} невозможно нормально тестировать и отлаживать
    • Поддержка большим количеством готовых клиентских библиотек на все случаи жизни. Те, кто будет вашим api пользоваться, скажут большое человеческое спасибо.
    • Поддержка автоматизированного интеграционного тестирования. Когда сервер на любые запросы отдаёт 200 ОК — ну, это такое себе развлечение.
    Читать дальше →
  • Мифы о 152-ФЗ, которые могут дорого обойтись оператору персональных данных

      Всем привет! Я руковожу центром киберзащиты DataLine. К нам приходят заказчики с задачей выполнения требований 152-ФЗ в облаке или на физической инфраструктуре.
      Практически в каждом проекте приходится проводить просветительскую работу по развенчанию мифов вокруг этого закона. Я собрал самые частые заблуждения, которые могут дорого обойтись бюджету и нервной системе оператора персональных данных. Сразу оговорюсь, что случаи госконтор (ГИС), имеющих дело с гостайной, КИИ и пр. останутся за рамками этой статьи.

      Читать дальше →
    • Использование DiagnosticSource в .NET Core: практика

        В предыдущей статье я рассказал про механизм DiagnosticSource и на простом примере показал, как с его помощью можно перехватывать запросы в базу данных через классы SqlConnection и SqlCommand и измерять время их выполнения.


        В настоящее время DiagnosticSource уже используется в AspNetCore, EntityFrameworkCore, HttpClient и SqlClient — каждый из них отправляет собственные события, которые могут быть перехвачены и обработаны.


        В этой статье я хочу рассмотреть несколько примеров того, как можно на практике использовать DiagnosticSource в приложениях ASP.NET Core.


        • CorrelationID и пробрасывание заголовков между сервисами
        • Сбор метрик и трассировок
        • Логирование

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

        Читать дальше →
      • Несколько советов по Angular

        Прошло уже достаточно времени с выхода обновленного Angular. В настоящее время множество проектов завершено. От "getting started" множество разработчиков уже перешло к осмысленному использованию этого фреймворка, его возможностей, научились обходить подводные камни. Каждый разработчик и/или команда либо уже сформировали свои style guides и best practice либо используют чужие. Но в тоже время часто приходится сталкиваться с большим количеством кода на Angular, в котором не используются многие возможности этого фреймворка и/или написанного в стиле AngularJS.


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

        Читать дальше →
        • +21
        • 11,9k
        • 9
      • Переопределение Equals и GetHashCode. А оно надо?

        • Перевод
        Если вы знакомы с C#, то, скорее всего, знаете, что необходимо всегда переопределять Equals, а также GetHashCode, чтобы избежать снижения производительности. Но что будет, если этого не сделать? Сегодня сравним производительность при двух вариантах настройки и рассмотрим инструменты, помогающие избегать ошибок.

        Читать дальше →
      • CQRS. Факты и заблуждения

        • Tutorial

        CQRS — это стиль архитектуры, в котором операции чтения отделены от операций записи. Подход сформулировал Грег Янг на основе принципа CQS, предложенного Бертраном Мейером. Чаще всего (но не всегда) CQRS реализуется в ограниченных контекстах (bounded context) приложений, проектируемых на основе DDD. Одна из естественных причин развития CQRS — не симметричное распределение нагрузки и сложности бизнес-логики на read и write — подсистемы Большинство бизнес-правил и сложных проверок находится во write — подсистеме. При этом читают данные зачастую в разы чаще, чем изменяют.

        Не смотря на простоту концепции, детали реализации CQRS могут значительно отличаться. И это именно тот случай, когда дьявол кроется в деталях.
        Читать дальше →
      • Избавляемся от boilerplate для валидации в ASP.NET MVC

          В большинстве примеров проверка входных данных ASP.NET MVC осуществляется следующим образом:

                  [HttpPost]
                  public IActionResult Test(SomeParam param)
                  {
                      if (!ModelState.IsValid)
                      {
                          return View(param);
                          // return Json({success: false, state: ModelState});
                      }
                      
                      dbContext.UpdateData(param);
          
                      return RedirectToAction("index");
                      // return Ok({success: true});
                  }
          

          Этот код можно улучшить:

          1. вынести валидацию из тела метода и избавиться от дублирования if (!ModelState.IsValid)
          2. вернуть код ответа 422
          Читать дальше →
        • Полное практическое руководство по Docker: с нуля до кластера на AWS

          • Перевод



          Содержание



          Вопросы и ответы


          Что такое Докер?


          Определение Докера в Википедии звучит так:


          программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы; позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, а также предоставляет среду по управлению контейнерами.



          Ого! Как много информации.

          Читать дальше →
        • Переход с ASP.NET к ASP.NET Core 2.0

          • Tutorial

          Эта статья является переводом справочного руководства по переносу приложений из ASP.NET в ASP.NET Core 2.0. Ссылка на оригинал


          Содержание


          1. Требования
          2. Выбор Фреймворка
          3. Различия в структуре проекта
          4. Замена Global.asax
          5. Хранение конфигураций
          6. Встроенный механизм Dependency Injection
          7. Работа со статическими файлами

          Требования


          • .NET Core 2.0.0 SDK или более поздняя версия.


          Выбор фреймворка


          Для работы с ASP.NET Core 2.0 проектом, разработчику предстоит сделать выбор – использовать .NET Core, .NET Framework или использовать сразу оба варианта. В качестве дополнительной информации можно использовать руководство Choosing between .NET Core and .NET Framework for server apps (вкратце можно сказать что .NET core является кроссплатформенной библиотекой, в отличие от .NET Framework) для того чтобы понять, какой Фреймворк для вас окажется наиболее предпочтительным.
          После выбора нужного Фреймворка в проекте необходимо указать ссылки на пакеты NuGet.
          Использование .NET Core позволяет устранить многочисленные явные ссылки на пакеты, благодаря объединенному пакету (мета пакету) ASP.NET Core 2.0. Так выглядит установка мета пакета Microsoft.AspNetCore.All в проект:

          Читать дальше →
        • Развертывание .NET Core проекта в Azure Web App для Linux

          • Tutorial
          Web Apps на базе Linux позволяет разработчикам запускать веб-приложения в Docker контейнерах для Linux. Это облегчает перенос существующих приложений, размещенных и оптимизированных для платформы Linux в Azure App Service. Кроме того, разработчики могут разворачивать приложения на различных языках программирования и платформах используя при этом уже знакомый инструментарий Docker и Azure App Service.

          image
          Читать дальше →
          • +13
          • 5,5k
          • 4
        • 10 типов структур данных, которые нужно знать + видео и упражнения

          Екатерина Малахова, редактор-фрилансер, специально для блога Нетологии адаптировала статью Beau Carnes об основных типах структур данных.

          «Плохие программисты думают о коде. Хорошие программисты думают о структурах данных и их взаимосвязях», — Линус Торвальдс, создатель Linux.

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

          В этой статье я покажу вам 10 самых распространенных структур данных.
          Читать дальше →
        • Как настроить Travis CI для проекта .NET Core + PostgreSQL

          • Tutorial

          Я расскажу о том, как настроить автоматический запуск модульных тестов в сервисе Travis CI для .NET Core проекта, в котором используется PostgreSQL.


          Можно использовать эту статью как пример для быстрого старта.


          Читать дальше →
          • +13
          • 5,3k
          • 8
        • Собеседование для фронтенд-разработчика на JavaScript: самые лучшие вопросы

          • Перевод
          Недавно мне довелось побывать на встрече участников проекта FreeCodeCamp в Сан-Франциско. Если кто не знает, Free Code Camp — это сообщество, нацеленное на изучение JavaScript и веб-программирования. Там один человек, который готовился к собеседованиям на позицию фронтенд-разработчика, попросил меня подсказать, какие вопросы по JavaScript стоит проработать. Я немного погуглил, но не смог найти подходящего списка вопросов, на который я бы мог дать ссылку и сказать: «Разбери эти вопросы и работа твоя». Некоторые списки были близки к тому, что мне хотелось найти, некоторые выглядели очень уж простыми, но все они были либо неполными, либо содержали вопросы, которые вряд ли кто станет задавать на реальном собеседовании.

          image
          Читать дальше →
        • МЕГА ищет идеи: новый сезон

            Современные торговые центры перестали быть просто местом для шопинга. Они становятся своеобразными общественными пространствами, куда гости приезжают за новыми впечатлениями. Если вы знаете, как с помощью технологий сделать посещение торгового центра интереснее, комфортнее и полезнее для потребителей — добро пожаловать на наш МЕГА Accelerator 2. С вас идеи, с нас — поддержка, плюшки, уникальная экспертиза и приз в 2 млн рублей.



            За подробностями добро пожаловать под кат.
            Читать дальше →
            • +12
            • 4,2k
            • 9
          • GitLab CI для непрерывной интеграции и доставки в production. Часть 1: наш пайплайн



              Итак, GitLab CI: что можно ещё рассказать о нём? На хабре уже есть статьи про установку, про настройку раннеров, про командное использование, про GitLab Flow. Пожалуй, не хватает описаний того, как используется GitLab CI в реальном проекте, где задействовано несколько команд. А в современном мире разработки ПО это действительно так: ведь есть (как минимум) разработчики, тестировщики, DevOps- и релиз-инженеры. С подобным разделением на команды мы работаем уже несколько лет. В этой статье я расскажу о том, как мы, используя и улучшая возможности GitLab CI, реализовали и применяем в production для коллектива из нескольких команд процессы непрерывной интеграции (CI) и отчасти доставки приложений (CD).
              Читать дальше →
            • Работа с геолокацией в iOS 24/7

              • Tutorial



              В последнее время, часто вижу вопрос:
              Можно ли в iOS работать с геолокацией, когда приложение свернули и отправлять данные на сервер?

              Это действительно возможно и совсем не сложно.
              How to вместится в превью статьи.

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


              Чтобы была какая-то конкретика, я предположил, что перед нами стоит задача написать вело-трекер. Со стороны пользователя это выглядит так:


              1. Скачиваю приложение
              2. Запускаю
              3. Регистрируюсь
              4. Нажимаю куда просят
              5. Закрываю
              6. Катаюсь
              7. Запускаю
              8. Вижу результат

              p.s. финальный код здесь.

              Любые совпадения с реально существующим приложением случайны
            • ASP.NET Core: Создание справочных страниц веб-API ASP.NET с помощью Swagger

              • Перевод
              • Tutorial
              При создании высоконагруженных приложений бывает сложно разобраться в различных API. Сформировать качественную документацию и справочные страницы в рамках веб-API посредством Swagger с интеграцией Swashbuckle .NET Core так же просто, как добавить пару пакетов NuGet и изменить Startup.cs.


              Читать дальше →
              • +22
              • 18,2k
              • 2
            • Реактивные приложения с Model-View-Intent. Часть 1: Модель

              • Перевод
              При работе с платформой Android я столкнулся со множеством проблем, потому что проектировал свои Модели неправильно. Мои приложения были недостаточно реактивными. Теперь используя RxJava и Model-View-Intent (MVI) я, наконец, добился нужного уровня реактивности. Об этом я пишу цикл статей. В первой части расскажу о модели и объясню, чем она важна.
              Читать дальше →
              • +16
              • 22,1k
              • 8
            • Еще про внедрение таймзон в долгоживущий проект

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



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

                  Перед тем, как перейти к техническим деталям, давайте немного освежим терминологию.

                  • Идентификация — это заявление о том, кем вы являетесь. В зависимости от ситуации, это может быть имя, адрес электронной почты, номер учетной записи, итд.
                  • Аутентификация — предоставление доказательств, что вы на самом деле есть тот, кем идентифицировались (от слова “authentic” — истинный, подлинный).
                  • Авторизация — проверка, что вам разрешен доступ к запрашиваемому ресурсу.


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

                  Аналогично эти термины применяются в компьютерных системах, где традиционно под идентификацией понимают получение вашей учетной записи (identity) по username или email; под аутентификацией — проверку, что вы знаете пароль от этой учетной записи, а под авторизацией — проверку вашей роли в системе и решение о предоставлении доступа к запрошенной странице или ресурсу.

                  Однако в современных системах существуют и более сложные схемы аутентификации и авторизации, о которых я расскажу далее. Но начнем с простого и понятного.
                  Читать дальше →