на чем писать backend

Пишем backend для мобильного приложения за несколько минут

Здравствуйте! Моя основная область деятельности — разработка мобильных приложений (iOS, Android). И большая часть приложений, использует взаимодействие с другими пользователями, хранение данных и другие задачи требующие наличие единого сервера. Поэтому для большей части приложений приходится писать свой велосипедbackend. А так как я, в основном являюсь мобильным разработчиком, то написание этого сервиса всегда становится небольшой проблемой — приходится задействовать веб-разработчика или искать подходящий BaaS сервис, даже если надо написать всего пару запросов.
Поэтому было принято решение, попробовать найти инструмент, позволяющий в короткие сроки написать небольшой веб-сервис, который можно было бы использовать в мобильном приложении.

За исходные данные были приняты: знание что такое HTTP, REST, JSON и начальный уровень разработки на Python (Django).
И вот на днях, на глаза попался небольшой проект, на котором можно было провести полевые испытания. Суть проекта — приложение для одного мероприятия. Нужно отображать спикеров и их доклады.
После непродолжительных поисков, за основу были взяты следующие инструменты: Python (как основной язык разработки), Django (как базовая платформа) и фреймворк Tastypie (представленный как фреймворк для создания API веб-сервисов). Итак, приступим.
Создаем шаблон приложения Django:

В настройках файла settings.py прописываем необходимые настройки для базы данных, локализацию, время. Устанавливаем пакет tastypie:

Обратите внимание, что требуется Python2.6+ и Django 1.5+. Из-за незнания этого факта пришлось потратить немного больше времени, т.к. фреймворк отказывался работать. Кроме того, нужно установить аналогичным образом пакет python-mimeparse.
Далее, в файле settings.py, прописываем:

или добавляем уже в существующий список приложение ‘tastypie’.
Теперь пропишем модели нашей предметной области:

Мы написали модель докладчика (Speaker) и модель выступления (Event). У каждого выступления обязательно есть докладчик. Теперь, сделаем так, чтобы мы могли полноценно работать с нашими моделями как с ресурсами через REST протокол.
Создаем в нашем приложении пакет api и файлом resources.py (или можно его создать в основном пакете).

В этом файле мы создали классы, так называемых ресурсов, основных объектов в нашем REST сервисе. Это как раз те ресурсы, к которым мы будем обращаться. Каждый класс содержит ссылку на ту модель, которую он представляет. Поле queryset возвращает нам набор объектов получаемых из базы при обращении к даному ресурсу. Поле resource_name необязательно, и позволяет нам указать дополнительно наименование ресурса, по которому он будет доступен нам.
Еще один момент, в классе EventResources мы указали отдельное поле speaker, которое указывает что ресурс события ссылается на ресурс спикера.
Теперь осталось только прописать в файле urls.py обращения к нашему сервису. Это делает очень просто.

Теперь запускаем наш проект

Теперь, если сервер успешно запустился, открыв в браузере страницу по адресу http://localhost:8000/api/entry/?format=json, увидим там что фреймворк видит все наши ресурсы и отобразил нам схему нашего сервиса:

Параметр format принудительно указывает в каком формате мы хотим получить данные, но вместо него можно в запросе указать заголовок Content-type: application/json. Кроме JSON поддерживаются xml, yaml, bplist.
По адресу schema можно посмотреть описание структуры модели (поля, типы и описание), а по адресу list_endpoint можно уже получить наши ресурсы, которые мы предварительно записали в базу.
Теперь, открыв адрес http://localhost:8000/api/v1/events/?format=json мы увидим там что-то вроде этого:

Как видим — ничего сложного. В разделе meta выводится основная информация о ресурсе: количество записей, размер выдачи и тд. Одновременно мы можем обратиться к конкретному событию, обратившись к ресурсу по его id — http://localhost:8000/api/v1/events/1/
Можем создать запись выполнив POST запрос и передав в него объект в JSON формате, обновить запись PUT запросом и удалить с помощью DELETE.
Так же, в tastypie у класса ModelResource есть большой набор переопределяемых полей и методов, с помощью которых мы можем полностью изменить структуру выдаваемых данных. Например, мы хотим вместо ссылки на спикера, сразу получать его имя, чтобы не делать лишний запрос. В классе EventResource переопределяем метод dehydrate:

В нем, мы находим спикера в базе и подставляем его в объект bundle, который представляет из себя словарь который отдается ресурсом. Теперь, ответ на запрос будет выглядеть так (напишу только основную часть):

Источник

Современный backend-разработчик 2018

Jun 26, 2018 · 7 min read

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

До сегодняшнего д н я дорожная карта по бэкенду представляла собой просто свод технических рекомендаций без четкого указания способов их применения. Мы переработали данные материалы и создали пошаговое руководство для облегчения понимания всего процесса.

Без лишних предисловий давайте перейдем сразу к делу.

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

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

Картинка для привлечения внимания — листайте дальше

Шаг 1– Изучение языка

Существует великое множество языков программирования — вам остается только выбрать наиболее подходящий вариант. Чтобы упросить эту задачу, я разбил языки на подкатегории.

Языки сценариев: Python, Ruby, PHP, Node.js, TypeScript (дополнительно).

Функциональные языки: Elixir, Scala, Erlang, Clojure, Haskell.

Мультипарадигменные языки: Goland, Rust.

Новичкам в бэкенде я бы посоветовал начинать со сценарных языков, т.к. они строго регламентированы правилами, поэтому научиться им можно намного быстрее. Если вы немного понимаете во фронтенде, то, легче всего вам будет освоить Node.js. Кроме того, этот язык хорошо котируется на биржах разработчиков.

Если вы можете похвастаться опытом в бэкенд-разработке и знаете хоть какие-то сценарные языки, то мой вам совет: не зацикливайтесь на скриптах и переходите к языкам из раздела «функциональные» или «мультипарадигматические». Например, если вы уже работали в PHP или Node.js, то не переходите к Python или Ruby, а попробуйте Erlang или Golang. Так вы разовьете гибкость мышления и станете более открытыми новому опыту.

Читайте также:  на стороне ав параллелограмма авсд отмечена точка е так что

Шаг 2 — Используйте знания на практике

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

· Реализуйте ряд команд, которыми пользуетесь в bash (например, функционал ls);

· Напишите команду, которая отбирает и сохраняет reddit посты в /r/programming в формате JSON-файла;

· Напишите команду, которая выдает структуру каталога в формате JSON (например, с помощью jsonify dir-name вы получите JSON-файл со структурой внутри dir-name)

· Напишите команду, которая читает JSON-файл из примера выше и создает структуру каталога.

· Проанализируйте свои ежедневные задачи и постарайтесь автоматизировать как минимум одну из них.

Шаг 3 — Изучите менеджер пакетов

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

Если ваш выбор пал на PHP, то изучите Composer, для Node.js — присмотритесь к NPM или Yarn, для Python — Pip, а для Ruby — RubyGems. Вне зависимости от вашего выбора, обязательно научитесь правильно работе с нужным менеджером пакетов.

Шаг 4 — Стандарты и полезные рекомендации

В каждом языке есть свои стандарты и ноу-хау. Изучите их для выбранного языка. Например, в PHP имеется PHP-FIG и PSR, а для Node.js разные сообщества создали множество полезных руководств. Тоже самое придумано и для других языков программирования.

Шаг 5 — Безопасность

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

К этому моменту вы уже изучили основы языка, его стандарты и примеры использования, вопросы безопасности и нюансы работы с менеджером пакетов. Самое время перейти к созданию пакета и передаче его другим пользователям для работы. Например, если вы выбрали PHP, то создавать пакеты будете на Packagist, в Node.js будете пользоваться пакетным менеджером Npm и т.д.

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

· Рефакторинг и реализация лучших идей, которым вы научились;

· Изучите существующие проблемы и постарайтесь решить какую-либо из них;

· Добавьте новый функционал.

Шаг 7 — Познакомьтесь с тестированием

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

Погуглите различные приложения для тестирования, выберите наиболее подходящее

PHP — PHPUnit, PHPSpec, Codeception;

Node.js — Mocha, Chal, Sinon, Mockery, Ava, Jasmine.

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

Шаг 8 — Практический этап

Напишите пару модульных тестов для решения практических задач. В идеале, не основании примера из шага 6.

Почитайте про метрики тестирования и рассчитайте тестовое покрытие для написанных модулей.

Шаг 9 — Познакомьтесь с реляционными базами данных

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

Существует несколько разных баз данных. Однако, если вы освоите одну из них, то остальные дадутся вам намного легче. Присмотритесь к MySQL, MariaDB (в принципе, это почти одно и тоже. Maria DB — это ответвление MySQL) и PostgreSQL. Начинать лучше с MySQL.

Самое время попробовать на практике все, что было изучено ранее.

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

· Профили пользователей: регистрация, авторизация;

· Зарегистрированный пользователь может создавать посты в блоге;

· Пользователь может просматривать все свои посты в блоге;

· Пользователь может удалять все свои посты в блоге;

· Убедитесь в том, что пользователь видит только свои посты, а не записи, созданные другими пользователями;

· Напишите модульные и интеграционные тесты для приложения;

· Вы должны использовать индексы для запросов. Проанализируйте запросы и удостоверьтесь, что для них прописаны индексы.

Шаг 11 — Освойте фреймворки

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

Если вы пишите на PHP, то я бы советовал присмотреться к Laravel или Symfony, а также микрофреймворками (Lumen или Slim). Для Node.js также написано много фреймворков, однако самым популярным остается Express.js

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

Шаг 13 — Освойте базу данных NoSQL

Для начала, разберитесь, что это такое, для чего нужно, и в чем их отличие от реляционных баз данных. Функционал различных NoSQL немного отличается, поэтому потратьте время на небольшое исследование всех сходств и различий. Самые популярные со схожим функционалом: MongoDB, Cassandra, RethinkDB и Couchbase. Если вам нужна только одна база данных, то смело берите MongoDB.

Шаг 14 — Кэширование

Изучите, как реализуется кэширование на уровне приложения. Разберитесь с правилами использования Redis или Memcached и проведите кэширование в приложении, написанном в Шаге 12.

Читайте также:  можно ли спасти высохшие линзы

Шаг 15 — Создание RESTful API

Изучите REST и процесс создания RESTful API. Обязательно прочитайте раздел про REST в книге Роя Филдинга. Заготовьте парочку веских аргументов для встречи с кем-то, кто утверждает, что REST пригоден только для создания HTTP API.

Шаг 16 — Освойте различные методы авторизации

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

· OAuth — открытая аутентификация;

· Аутентификация по токенам;

· JWT — Аутентификация по JSON Web Tokens

Шаг 17 — Брокеры сообщений

Почитайте о брокерах сообщений, разберитесь в их назначении и использовании. Существуют различные брокеры, но самые популярные — это RabbitMQ и Kafka. Если тема вас заинтересует, то сначала освойте RabbitMQ.

Шаг 18 — Поисковики

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

Примеры: ElasticSearch, Solr, Sphinx.

Шаг 19 — Научитесь пользоваться Docker

Docker — это отличное подспорье в разработке. Он может все, начиная с репликации рабочей среды, очистки ОС или ускорения выполнения кода и заканчивая тестированием и развертыванием. Ключевой вопрос: «как же Docker поможет именно мне?» я оставлю открытым — вы сможете нагуглить самые подходящие варианты. Для этого шага освойте принципы работы с Docker.

Шаг 20 — Понимание работы веб-серверов

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

Примеры: Apache, Nginx, Caddy, MS IIS.

Шаг 21 — Научитесь пользоваться Web Sockets

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

Шаг 22 — Изучите GraphQL

Научитесь создавать API с помощью GraphQL. Разберитесь в его отличии от REST, и почему его называют REST 2.0.

Шаг 23 — Присмотритесь к графическим базам данных

Графические модели — это очень удобный способ представления отношений данных, а графические базы данных позволяют быстро и удобно хранить, восстанавливать и создавать запросы. Почитайте про использование Neo4j или OrientDB.

Шаг 24 — Не останавливайтесь на достигнутом

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

И помните, что ключ к успеху — практика, практика и еще раз практика. Вначале все выглядит действительно страшно и не понятно, может появиться чувство, что вы ничего не понимаете. Но это нормально.. Со временем вы поймете, что все начинает получаться.

Источник

Зачем делают backend на разных языках?

Доброго часа.
Подскажите зачем пишут backend на нескольких языках? Я понимаю что в больших проектах java и с++ это замена классическому php но нельзя ли реализовать например backend только на java или c++? Зачем писать на двух языках?

Например backend
MSN.com написан только на ASP.NET
YouTube.com написан на C, C++, Python, Java, Go

За что отвечает например C++, JAVA и GO на YouTube?
Понимаю, вопрос общий, но все же, хотя бы в теории объясните.

Простой 4 комментария

Хотя для бэкенда уже мощные CMS.

Decentralized Apps как Python в Data Analiz

Возьмем например Дропбокс.

Вот вам и 3 языка работающих одновременно в Дропбоксе на бэке.

Или такова была особенность задачи. Пример с комбинацей Rust/Go выше приведен. Где то может быть лучше один язык, где то другой.

Вы преувеличивайте значение языка. Это всего лишь инструмент программиста. Такой же как клавиатура. Опытный программист за долгие годы изучает не меньше десятка языков, а кто то и намного больше. Ничего такого в этом нет.

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

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

Спасибо за ответ, но я очень сомневаюсь что вы сможете построить дом одним лишь топором.

то есть вы понимаете, что нужны разные инструменты?

наши предки строили одним топором успешно. и сложные весьма строительные объекты.

да и сейчас иногда люди практикуют такое.

Подскажите зачем пишут backend на нескольких языках?

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

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

Источник

Как стать backend-разработчиком с нуля?

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

Читайте также:  мморпг где можно все

1. Определитесь с языком программирования

В отличие от frontend-разработчика, которому достаточно владеть HTML/CSS и JavaScript, backend-девелоперу приходится сделать непростой выбор. Языков много, одни развиваются более активно, другие применяются для узких задач.

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

Cогласно исследованию The State of the Octoverse, Go входит в топ-10 языков с самым быстро растущим комьюнити. Кроме того, в 2020 году он занял первое место в списке самых высокооплачиваемых языков. В backend-разработке он нужен для создания микросервисов и высоконагруженных проектов, где много пользователей одновременно работают с сайтом или приложением.

PHP не сдает позиции одного из самых популярных языков интернета, Ruby и Node.js также предлагают отличные возможности для тех, кто их изучает. Когда вы освоите базовые правила и возможности выбранного языка, сразу опробуйте их на практике. Пишите маленькие приложения, которые будут собирать веб-страницы по заданному тегу, автоматизируйте свои ежедневные задачи, придумывайте цели и выстраивайте пути к ним.

2. Познакомьтесь с пакетными менеджерами

Когда вводная часть позади, а список базовых приложений выходит за 5-10 позиций, переходите к следующему шагу. Освойте пакетные менеджеры (package manager) — специальные утилиты, которые позволяют добавлять в приложения сторонние библиотеки, чтобы расширять свои возможности и создавать новые функции. При помощи них вы также сможете предлагать свои библиотеки для использования другим разработчикам.

Пакетный менеджер у каждого языка свой. В Python он называется pip, в PHP — Composer, в Ruby — RubyGems. К этому моменту вы поймете, чего недостает вашим предыдущим продуктам, улучшите их работоспособность и поставите перед собой новые цели.

Освойте программирование на Go и backend-разработку высоконагруженных приложений, чтобы стать незаменимым специалистом в команде. Дополнительная скидка 5% по промокоду BLOG.

3. Приобщитесь к лучшим практикам

Главный навык любого программиста — это умение искать информацию. Изучайте опыт других разработчиков на Github и других профильных сайтах, ищите отраслевые стандарты. Некоммерческая организация OWASP (Open Web Application Security Project) регулярно обновляет правила для создания безопасных веб-приложений.

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

4. Тестируйте свой код

Умение тестировать свой код и вычищать в нем баги входит в must-have любого разработчика. Разберитесь, как строится процесс тестирования, какие бывают тесты для приложений и как их нужно писать.

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

5. Переходите к базам данных

Работа backend-разработчика часто ассоциируется с реляционными хранилищами данных, потому что именно они и составляют backend сайта или приложения. А SQL-базы остаются одной из ключевых технологий как в программной разработке, так и в веб-девелопменте.

Это обширная тема, разобраться в которой может быть даже сложнее, чем выучить тот же Python. Сам по себе язык структурированных запросов (SQL) освоить нетрудно — в 70-х годах его придумали как раз для тех специалистов, которым для работы необязательно знать программирование. Однако простые на вид процессы обработки запросов в базе данных скрывают множество хитростей, так что будьте готовы отложить обучение до тех пор, пока не начнете заниматься рабочими проектами. А пока выучите базовые принципы и термины — ключи, индексы, нормализация и т.д.

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

6. Изучите фреймворки

Фреймворки объединяют набор технических средств, которые упрощают выполнение какой-либо задачи. По сути, это мини-платформа разработки, направленная на узкий спектр целей.

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

7. Углубляйтесь в базы данных

От реляционных баз данных переходите к нереляционным. Эта тема чуть сложнее, поскольку решений для работы с неструктурированными данными очень много, и у многих из них своей собственный, уникальный язык. Новичку стоит разобраться с MongoDB, Cassandra, RethinkDB и Couchbase. MongoDB набирает все большую популярность у разработчиков, так что ее нужно сделать приоритетом.

8. Расширяйте набор умений

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

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

Освойте программирование на Go и backend-разработку высоконагруженных приложений.

Источник

Строительный портал