Существует множество языков программирования, которые вы можете использовать для создания сервера вашего веб-приложения, но независимо от того, какой из них вы используете, есть основные концепции, которые вам всегда нужно знать. К ним относятся такие вещи, как маршрутизация, безопасность, взаимодействие с базами данных, сериализация в форматы, такие как JSON, и HTTP.
Со всеми этими концепциями, о которых нужно думать, и всеми различными инструментами и фреймворками, которые вы можете выбрать, изучение веб-разработки может быть вполне понятным. Но одна вещь, которая помогает мне при изучении нового инструмента, — это разбиение изучаемого на задачи, особенно когда они строятся друг на друге.
Поэтому для того, чтобы опробовать стек веб-разработки на новом языке, понять, нравится ли он мне, и получить отзывы о паттернах реализации, я пробую нечто под названием #WebDevSampler — это набор упражнений для начала веб-разработки на новом языке программирования. Идея задачи заключается в следующем:
- #WebDevSampler предполагает, что вы знаете основы языка, такие как итерация, функции, типы данных, компиляция/запуск программы.
- Девятое упражнение предполагает, что вы знакомы с использованием HTTP-клиента, такого как cURL, httpie или Postman, для отправки полезной нагрузки JSON на конечную точку HTTP.
- Последние два упражнения, посвященные базам данных, предполагают знакомство с общением хотя бы с одним видом баз данных. Но я оставил неясным, какую базу данных использовать, так что вы можете использовать ту, которая вам больше нравится. В своем примере я использую SQLite.
- Каждое упражнение должно быть относительно простым, чтобы изменения кода, которые оно влечет за собой, могли продемонстрировать концепцию.
- Каждое упражнение опирается друг на друга, поэтому их следует выполнять по порядку.
- В любом упражнении то, что вы используете для решения проблемы, зависит от вас, поэтому то, что вы создаете в упражнении, намеренно расплывчато. Вы можете использовать только стандартную библиотеку языка, или вы можете использовать зависимости, такие как библиотеки, микрофреймворки и даже большие фреймворки (но я лично не стал бы начинать изучение нового языка с большого Rails-подобного фреймворка для этого языка, если вы не знаете, что хотите использовать этот фреймворк в работе).
- На самом деле, вам рекомендуется попробовать инструменты на вашем языке и сравнить их, чтобы увидеть, какие из них вам больше нравятся, и узнать, какие инструменты обычно используются на работе в сообществе веб-разработчиков вашего языка. Также рекомендуется попробовать установить хотя бы одну зависимость, чтобы увидеть, как работает управление пакетами в языке.
- Хотите провести другие эксперименты со своим кодом, которые не входят в упражнения? Тогда вам стоит это сделать! Идти по проторенному пути — отличный способ узнать больше нового, а в работе веб-разработчика вы делаете многое из этого!
Упражнения следующие:
- (1) Запустить и запустить HTTP-сервер, обслуживающий конечную точку, которая дает HTTP-ответ с сообщением типа «hello world!».
- Демонстрируется концепция: запуск HTTP-сервера и обработка HTTP-запроса.
- (2) Передайте HTTP-ответ в виде HTML с Content-Type
text/html
.- Демонстрация концепции: редактирование HTTP-ответа с помощью заголовков ответа.
- (3) Добавление другой конечной точки/маршрута на вашем HTTP-сервере, например, страницы
/about.html
.- Демонстрация концепции: обслуживание более чем одной конечной точки HTTP
- (4) Обслуживание конечной точки с помощью изображения или веб-страницы в вашей файловой системе
- Демонстрация концепции: обслуживание содержимого из файловой системы
- (5) Маршрутизация к конечным точкам с использованием более сложных маршрутов, таких как
/signup/my-name-is/:name
, например, если я пошлю запрос на/signup/my-name-is/Andy
, я получу ответ «Вы все записались на большой съезд Энди!».- Концепция продемонстрирована: Параметризированная маршрутизация
- (6) Напишите и запустите автоматизированный тест для конечной точки HTTP с параметрами
- Демонстрация концепции: Автоматизированное тестирование с конечной точкой HTTP в одном из инструментов CLI для тестирования вашего языка.
- (7) Эскейпируйте HTML-теги в вашей конечной точке. Например,
/signup/my-name-is/<i>Andy
должен быть санирован, чтобы не отображать ваше имя курсивом.- Демонстрируемая концепция: Базовая санация ввода
- (8) Сериализация объекта/структуры/класса в некоторый JSON и передача его на конечную точку с
Content-Type: application/json
.- Демонстрируемая концепция: Сериализация JSON, которая часто используется при создании бэкенд API.
- (9) Добавить конечную точку POST HTTP, чей вход имеет Content-Type
application/json
, десериализовать его в объект/структуру/класс, а затем использовать некоторую часть объекта для создания некоторой части HTTP-ответа.- Демонстрируемая концепция: десериализация JSON
- (10) Теперь попросите конечную точку POST сохранить содержимое в какой-либо базе данных (MongoDB, Postgres, Cassandra, любой базе данных, которую вы хотите).
- Демонстрация концепции: Ввод базы данных
- (11) Теперь сделайте конечную точку GET, которая извлекает часть данных из базы данных.
- Демонстрация концепции: Получение данных из базы данных
Если вы хотите увидеть мои ответы в Go, на котором я профессионально кодирую уже 7 лет, вы можете посмотреть их здесь.
Куда идти после испытания?
Если вы справились с примерами, поздравляю вас и надеюсь, что вы узнали кое-что о том, как ведется веб-разработка на вашем языке!
Поскольку это пробник, упражнения должны были дать представление о каждой из концепций веб-разработки, о которых они рассказывают. Так что если вы новичок в веб-разработке, то хорошей следующей остановкой будет поиск концепций, о которых говорится в упражнениях, и дальнейшее изучение их. Например, в упражнении по санитарии ввода, как я уже упоминал в комментариях к коду, в производственном приложении я скорее всего буду генерировать HTML с помощью библиотеки, в которую встроена санитария пользовательских данных, а также более строгий набор модульных тестов, чтобы закрыть возможные дыры в безопасности. В то время как в примерах с базой данных я бы создавал остальные методы CRUD (Create, Read, Update, Delete) для работы с базой данных.
Если вы уже занимались веб-разработкой на другом языке, то следующим шагом, который я бы рекомендовал сделать, будет изучение экосистемы языка программирования, на котором вы выполняли эту задачу. Например, фреймворки, управление пакетами, языковые идиомы и популярные библиотеки для решения проблем в веб-разработке.
И независимо от уровня опыта, я рекомендую проверить сообщество вашего языка программирования, которое, в частности, отлично подходит для налаживания контактов (я получил свою первую работу на Go благодаря общению на Boston Go в 2015 году!), ознакомления с кодом других людей на этом языке, а если вы хотите выступить с публичным докладом на новом языке программирования, то встреча на этом языке — отличная возможность.
Наконец, я определенно призываю вас делиться своими ответами на вашем языке здесь, в твиттере @AndyHaskell2013, на GitHub или где-либо еще с хэштегом #WebDevSampler