В последнее время я решил разработать программу для сокращения URL-адресов (конечно же, бесплатную и с открытым исходным кодом). Это совсем не сложно, но для меня это был отличный шанс изучить и укрепить свои навыки работы в Интернете. В этой статье я расскажу о фреймворках и библиотеках, которые я буду использовать для сборки этого проекта. Давайте начнем!

URL Shortener

Таким образом, мы все находимся на одной странице. Сокращение URL-адресов - это веб-сайт, который предоставляет более короткий URL-адрес, который перенаправляет на другой более длинный. Это позволяет пользователю встраивать куда-нибудь более чистый URL, а не потенциально очень длинный.

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

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

Бэкэнд и база данных

Очевидно, что для обеспечения беспроблемного взаимодействия с пользователем требуется производительный бэкэнд. Внутренний сервер будет хранить перенаправления и эффективно их обслуживать. Первым на ум пришел Python, но, поскольку он не очень быстрый, он, вероятно, не будет масштабироваться. Поэтому вместо этого мы будем использовать мой любимый компилируемый язык системного программирования: Rust! Я не буду здесь вдаваться в подробности о Rust, но в основном это современный, безопасный для памяти, многофункциональный, производительный язык программирования с огромной базой пользовательских библиотек (crates.io). В частности, я хотел опробовать веб-фреймворк Ракета. Мы создадим очень простой REST API для доступа к бэкэнду.

Это подводит нас к базе данных - ключом к этому является производительность. Мы не можем заставить пользователя ждать полсекунды, пока URL-ссылка загружается с диска и обслуживается. Вместо этого я буду использовать Redis, базу данных NoSQL с открытым исходным кодом в оперативной памяти. У Rust есть ящик для Redis, который называется… redis-rs! rocket также имеет встроенную поддержку для управления базой данных Redis.

Внешний интерфейс

Бэкэнд было бы очень утомительно использовать сам по себе - пользователю нужно было бы ввести URL-адрес с запрошенным идентификатором и местом назначения и записать ответ (который будет в виде обычного текста). Итак, я буду писать веб-интерфейс. Мы будем использовать node.js, очень популярный JS-фреймворк для веб-приложений. I̵'̵v̵e̵ не терпелось Опробуйте стройный, ̵ сравнительно новый, а охлаждайте одной странице ЗАЯВКА ̵f̵r̵a̵m̵e̵w̵o̵r̵k̵.̵ Если это это не распространяется работа, ̵ ОДНАКО, ̵ я всегда могу вживых ̵A̵n̵g̵u̵l̵a̵r̵J̵S̵.̵ держать вещи супер просто, я буду использовать инструментарий Express.js, а также CSS-библиотеку Bulma.

Развертывание

Я буду использовать NGINX, безопасный, быстрый и легкий (но многофункциональный) веб-сервер и обратный прокси-сервер для обслуживания приложения (как внутреннего, так и внешнего интерфейса) после его завершения. Чтобы все было в порядке, я также создам образ Docker для всего. Если все получится, я мог бы также написать статью о Kubernetes или Docker Swarm для оркестровки контейнеров!

Вот и все! В следующей статье мы начнем писать наш серверный код.