Проект Java и Spring с базой данных Firebase Realtime

Сокращатели URL-адресов — это удобные инструменты, которые позволяют нам преобразовывать длинные и сложные URL-адреса в более короткие и более управляемые. В этом руководстве мы рассмотрим, как создать API-интерфейс сокращения URL-адресов, используя базу данных Firebase Realtime Database в качестве серверной части и Spring Boot в качестве платформы. База данных Firebase Realtime предоставляет масштабируемую облачную базу данных NoSQL в режиме реального времени, а Spring Boot упрощает разработку RESTful API. Объединив эти технологии, мы можем создать мощный и эффективный сервис сокращения URL-адресов.

Предварительные требования: прежде чем мы начнем, убедитесь, что у вас есть следующее:

  1. Комплект разработчика Java (JDK), установленный на вашем компьютере.
  2. IDE (интегрированная среда разработки), например IntelliJ или Eclipse.
  3. Maven или Gradle для управления зависимостями.
  4. Учетная запись Firebase с настроенным проектом Firebase и включенной базой данных в реальном времени.
  5. Учетная запись с облачной платформой, которая поддерживает развертывание приложений Spring Boot. В этом руководстве мы будем использовать Heroku, бесплатную облачную платформу, для развертывания.

Шаг 1. Настройка проекта. Начнем с настройки нашего проекта в Spring Boot.

  1. Создайте новый проект Spring Boot, используя предпочитаемую среду IDE.
  2. Откройте файл pom.xml и добавьте необходимые зависимости.
  3. Добавьте зависимости Firebase Admin SDK и Apache Commons Codec для взаимодействия с Firebase и хеширования URL-адресов соответственно.
<dependencies>
    <!-- Other dependencies -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>8.0.0</version>
    </dependency>
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.15</version>
    </dependency>
</dependencies>

Шаг 2. Настройка Firebase. Чтобы связать наш API с Firebase, нам нужно настроить Firebase Admin SDK.

  1. Перейдите в консоль Firebase (console.firebase.google.com) и создайте новый проект или используйте существующий.
  2. В настройках проекта Firebase перейдите на вкладку «Учетные записи служб».
  3. Создайте новый закрытый ключ и загрузите файл служебной учетной записи JSON. Держите его в безопасном месте.
  4. Скопируйте файл JSON в каталог ресурсов вашего проекта.

Шаг 3. Реализация модели URL. Давайте создадим класс модели для представления объекта URL.

public class Url {
    private String id;
    private String originalUrl;
    private String shortUrl;    // Constructors, getters, and setters
}

Шаг 4. Реализация службы URL. Затем мы создадим класс службы для обработки бизнес-логики и взаимодействия с базой данных Firebase Realtime.

import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.database.*;
import org.apache.commons.codec.digest.DigestUtils;import javax.annotation.PostConstruct;
import java.io.FileInputStream;
import java.io.IOException;@Service
public class UrlService {
    private final String COLLECTION_NAME = "urls";
    private final FirebaseDatabase database;
public UrlService() throws IOException {
        FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");
        FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                .set.setDatabaseUrl("https://your-firebase-project-url.firebaseio.com")
        .build();
        FirebaseApp.initializeApp(options);
        database = FirebaseDatabase.getInstance();
    }
    public String shortenUrl(String originalUrl) {
        DatabaseReference ref = database.getReference(COLLECTION_NAME);
        String id = generateShortUrl(originalUrl);
        Url url = new Url();
        url.setId(id);
        url.setOriginalUrl(originalUrl);
        url.setShortUrl("https://your-domain.com/" + id);
        ref.child(id).setValueAsync(url);
        return url.getShortUrl();
    }
    public String getOriginalUrl(String shortUrl) {
        String id = extractIdFromShortUrl(shortUrl);
        DatabaseReference ref = database.getReference(COLLECTION_NAME).child(id);
        Url url = ref.getValue(Url.class);
        if (url != null) {
            return url.getOriginalUrl();
        }
        return null;
    }
    private String generateShortUrl(String originalUrl) {
        String hashedUrl = DigestUtils.sha256Hex(originalUrl);
        return hashedUrl.substring(0, 8); // Take the first 8 characters of the hash as the short URL
    }
    private String extractIdFromShortUrl(String shortUrl) {
        // Extract the ID from the short URL, e.g., https://your-domain.com/abc123 -> abc123
        // Implement this logic based on your URL shortening strategy
        return shortUrl.replace("https://your-domain.com/", "");
    }
}

метод generateShortUrl() использует хеш-алгоритм SHA-256 из библиотеки кодеков Apache Commons (DigestUtils.sha256Hex()) для вычисления хэша исходного URL-адреса. Первые 8 символов хеша извлекаются и используются в качестве короткого URL-адреса.

Обязательно включите библиотеку кодеков Apache Commons Codec в зависимости вашего проекта, чтобы получить доступ к классу DigestUtils.

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

Не стесняйтесь настраивать код в соответствии с вашими конкретными требованиями или изменять длину сгенерированного короткого URL-адреса. Дайте мне знать, если вам нужны дополнительные разъяснения или помощь!

Шаг 5. Реализация контроллера. Теперь давайте создадим класс контроллера для обработки конечных точек API.

@RestController
@RequestMapping("/api")
public class UrlController {
    private final UrlService urlService;

public UrlController(UrlService urlService) {
        this.urlService = urlService;
    }
    @PostMapping("/shorten")
    public ResponseEntity<String> shortenUrl(@RequestBody String originalUrl) {
        String shortUrl = urlService.shortenUrl(originalUrl);
        return ResponseEntity.ok(shortUrl);
    }
    @GetMapping("/original")
    public ResponseEntity<String> getOriginalUrl(@RequestParam("shortUrl") String shortUrl) {
        String originalUrl = urlService.getOriginalUrl(shortUrl);
        if (originalUrl != null) {
            return ResponseEntity.ok(originalUrl);
        } else {
            return ResponseEntity.notFound().build();
        }
    }
}

Шаг 6. Запуск и тестирование приложения. Теперь, когда мы внедрили API для сокращения URL-адресов, давайте запустим и протестируем приложение.

  1. Создайте проект с помощью Maven или предпочитаемого вами инструмента сборки.
  2. Запустите приложение Spring Boot.
  3. Используйте такие инструменты, как Postman или cURL, для тестирования конечных точек API. Вот несколько примеров запросов:
  • POST /api/shorten с исходным URL-адресом в теле запроса для создания короткого URL-адреса.
  • GET /api/original?shortUrl={shortUrl}, чтобы получить исходный URL-адрес, используя короткий URL-адрес.

Запустить на локальном хосте

  1. Запустите приложение Spring Boot. Убедитесь, что приложение Spring Boot запущено локально на вашем компьютере. Вы можете запустить его из своей IDE или выполнив соответствующую команду, например mvn spring-boot:run, если вы используете Maven.
  2. Определите порт. По умолчанию приложение Spring Boot работает на порту 8080. Однако, если вы настроили другой порт в своем приложении, обратите на это внимание.
  3. Доступ к API. Откройте веб-браузер или инструмент тестирования API (например, Postman) и используйте следующий URL-адрес для доступа к конечным точкам API: http://localhost:{port}/{endpoint}. Замените {port} на номер порта из конфигурации вашего приложения и {endpoint} на конкретную конечную точку, которую вы хотите протестировать (например, /api/shorten).
  4. Отправлять запросы. Отправлять запросы на конечные точки API с помощью соответствующего метода HTTP (например, GET, POST) и предоставлять необходимые параметры или тело запроса. Обязательно следуйте документации API или коду, который вы реализовали, для создания правильных запросов.
  5. Получать и анализировать ответы. Ответы от API будут возвращены в формате ответа HTTP. Проанализируйте коды состояния, заголовки и тело ответа, чтобы убедиться, что ваш API работает должным образом.

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

Развертывание приложения на Heroku:

Чтобы сделать API доступным в Интернете, мы можем развернуть его на облачной платформе. В этом руководстве мы будем использовать Heroku для развертывания.

  1. Создайте учетную запись Heroku, если у вас ее нет.
  2. Установите интерфейс командной строки Heroku и войдите в свою учетную запись Heroku.
  3. В каталоге вашего проекта запустите heroku create, чтобы создать новое приложение Heroku.
  4. Разверните приложение с помощью Git: git push heroku main.
  5. После завершения развертывания вы можете получить доступ к своему API по предоставленному URL-адресу Heroku.

Чтобы связать свой API с личным доменом, выполните следующие действия:

  1. Приобрести домен. Приобретите домен у регистратора доменных имен по вашему выбору. Популярные регистраторы доменов включают GoDaddy, Namecheap и Google Domains.
  2. Настройка параметров DNS. Войдите в свою учетную запись регистратора домена и перейдите к настройкам управления DNS для своего домена. Добавьте необходимые записи DNS, чтобы указать ваш домен на сервер вашего API. Как правило, вам нужно создать запись «A» или запись «CNAME». Обратитесь к документации вашего хостинг-провайдера за конкретными инструкциями.
  3. Настройте SSL-сертификат. Включите HTTPS для своего личного домена, чтобы обеспечить безопасную связь с вашим API. Вы можете получить SSL-сертификат в центре сертификации или воспользоваться такими услугами, как Let’s Encrypt, которые предоставляют бесплатные SSL-сертификаты.
  4. Обновите конфигурацию API. В приложении Spring Boot обновите конфигурацию, чтобы прослушивать запросы из вашего личного домена. Возможно, вам потребуется изменить конфигурацию сервера в файле application.properties или application.yml, чтобы указать сведения о домене и сертификате SSL.
  5. Разверните API на сервере. Разверните приложение Spring Boot на сервере, поддерживающем размещение приложений Java. Вы можете использовать облачные платформы, такие как Heroku, AWS Elastic Beanstalk или Google Cloud Platform, или настроить свой собственный сервер с помощью таких сервисов, как Apache Tomcat или Nginx.
  6. Проверьте соединение. После развертывания API и распространения настроек DNS получите доступ к API с помощью личного домена. Отправляйте запросы на конечные точки API и проверяйте, правильно ли они обрабатываются.

Следуя этим шагам, вы можете связать свой API с личным доменом и сделать его доступным с помощью удобного URL-адреса.

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