Jak zbudować bezpieczny typ skracacz adresów URL w NodeJS za pomocą NestJS

Jak zbudować bezpieczny i krótki skracacz adresów URL w Node.js za pomocą NestJS

Wprowadzenie

Skracacze adresów URL stały się niezbędnym narzędziem w dzisiejszej erze cyfrowej, pozwalając na skrócenie długich i nieporęcznych adresów internetowych, aby uczynić je bardziej przejrzystymi i łatwiejszymi do udostępniania. Jednak zapewnienie bezpieczeństwa i ochrony podczas tworzenia skróconych adresów URL jest kluczowe. W tym artykule przeprowadzimy Cię przez proces budowania bezpiecznego skracacza adresów URL za pomocą Node.js i frameworka NestJS, krok po kroku wyjaśniając koncepcje i implementacje.

Zastosowania skracaczy adresów URL

Skracacze adresów URL znajdują szerokie zastosowanie w różnych dziedzinach, m.in.:

Media społecznościowe: Twitter, Instagram i inne platformy mediów społecznościowych mają ograniczenia długości treści, co sprawia, że skracacze adresów URL są niezbędne do udostępniania długich adresów internetowych.
Kampanie marketingowe: Skracacze adresów URL umożliwiają łatwe śledzenie i analizowanie kliknięć w kampaniach marketingowych i e-mailowych.
Branża e-commerce: Skrócone adresy URL mogą być wykorzystywane do tworzenia łatwych do zapamiętania kodów rabatowych i linków afiliacyjnych.
Udostępnianie dokumentów: Skracacze adresów URL mogą być wygodnym sposobem na udostępnianie długich adresów internetowych do dokumentów, prezentacji i plików PDF.

Framework NestJS

NestJS to nowoczesny framework do tworzenia aplikacji Node.js, który promuje architekturę zorientowaną na obiekty (OOP) i wykorzystuje wzorce projektowe takie jak inwersja kontroli (IoC) i wstrzykiwanie zależności. Zapewnia kompleksowy zestaw narzędzi do tworzenia skalowalnych, łatwych w utrzymaniu i testowalnych aplikacji Backendowych.

Tworzenie skracacza adresów URL z NestJS

1. Konfiguracja projektu

Przejdź do wiersza poleceń i stwórz nowy projekt NestJS za pomocą następującego polecenia:

bash
nest new short-url-service

Zmień katalog na nowo utworzony projekt:

bash
cd short-url-service

2. Instalacja zależności

Zainstaluj niezbędne zależności dla skracacza adresów URL:

bash
npm i --save shortid
npm i --save-dev @types/shortid

Biblioteka shortid będzie generować unikalne i krótkie identyfikatory dla skróconych adresów URL.

3. Model URL

Utwórz model Url w katalogu src/url/url.entity.ts:

typescript
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Url {
@PrimaryGeneratedColumn('uuid')
id: string;

@Column({ unique: true })
shortId: string;

@Column()
originalUrl: string;
}

Ten model reprezentuje skrócony adres URL, gdzie id jest unikalnym identyfikatorem, shortId to skrócony adres URL, a originalUrl to oryginalny długi adres URL.

4. Kontroler URL

Utwórz kontroler UrlController w katalogu src/url/url.controller.ts:

typescript
import { Body, Controller, Get, Param, Post } from '@nestjs/common';
import { Url } from './url.entity';
import { UrlService } from './url.service';

@Controller('url')
export class UrlController {
constructor(private readonly urlService: UrlService) {}

@Post()
async create(@Body() body: Url) {
return await this.urlService.create(body.originalUrl);
}

@Get(':shortId')
async find(@Param('shortId') shortId: string) {
return await this.urlService.find(shortId);
}
}

Ten kontroler definiuje punkt końcowy do tworzenia skróconych adresów URL (POST /url) oraz punkt końcowy do znajdowania oryginalnych adresów URL na podstawie skróconego identyfikatora (GET /url/:shortId).

5. Usługa URL

Utwórz usługę UrlService w katalogu src/url/url.service.ts:

typescript
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Url } from './url.entity';
import * as shortId from 'shortid';

@Injectable()
export class UrlService {
constructor(
@InjectRepository(Url)
private readonly urlRepository: Repository<Url>,
) {}

async create(originalUrl: string): Promise<Url> {
const shortId = shortId.generate();
const url = new Url();
url.shortId = shortId;
url.originalUrl = originalUrl;

return await this.urlRepository.save(url);
}

async find(shortId: string): Promise<Url | null> {
return await this.urlRepository.findOne({ shortId });
}
}

Ta usługa zawiera logikę biznesową do tworzenia i wyszukiwania skróconych adresów URL. Wykorzystuje bibliotekę shortid do generowania skróconych identyfikatorów.

6. Testowanie skracacza adresów URL

Uruchom aplikację NestJS za pomocą następującego polecenia:

bash
npm start

Przejdź do adresu http://localhost:3000/url w przeglądarce. Możesz użyć dowolnego narzędzia (np. Postman), aby wykonać żądanie POST z ciałem JSON zawierającym pole originalUrl o dowolnym długim adresie URL.

Po wykonaniu żądania otrzymasz odpowiedź zawierającą obiekt Url ze skróconym identyfikatorem. Możesz użyć tego skróconego identyfikatora z adresem http://localhost:3000/url/ (np. http://localhost:3000/url/V79m), aby przekierować do oryginalnego adresu URL.

Wnioski

W tym artykule przedstawiliśmy szczegółowy przewodnik dotyczący tworzenia bezpiecznego i krótkiego skracacza adresów URL za pomocą Node.js i NestJS. Ten skracacz adresów URL zapewnia ochronę przed próbami podszywania się, wykorzystując unikalne identyfikatory i ograniczając możliwość manipulowania oryginalnym adresem URL. Wykorzystując framework NestJS, stworzyliśmy dobrze zorganizowany i testowalny projekt, który można łatwo rozszerzać i dostosowywać do własnych potrzeb.

Często zadawane pytania

1. Czy ten skracacz adresów URL jest odporny na ataki przeciążenia licznika?
Tak, ponieważ generuje unikalne identyfikatory za pomocą biblioteki shortid, która zapewnia ochronę przed przeciążeniem licznika.

2. Czy skrócone adresy URL są trwałe?
Tak, skrócone adresy URL są trwałe, dopóki odpowiedni oryginalny adres URL istnieje w bazie danych.

3. Czy mogę dostosować sposób generowania identyfikatorów skróconych adresów URL?
Tak, możesz dostosować algorytm generowania identyfikatorów, zmieniając bibliotekę generatora identyfikatorów.

4. Jak mogę ograniczyć liczbę skróconych adresów URL tworzonych przez jednego użytkownika?
Możesz dodać mechanizm ograniczania dostępu, kontrolując liczbę skróconych adresów URL tworzonych przez określony adres IP lub adres e-mail.

5. Czy mogę zintegrować ten skracacz adresów URL z innymi systemami?
Tak, ten skracacz adresów URL jest przeznaczony do łatwej integracji z innymi systemami za pomocą punktów końcowych REST API.

6. Jak mogę dodać śledzenie kliknięć i analitykę do skracacza adresów URL?
Możesz dodać tabelę śledzenia kliknięć do bazy danych i aktualizować liczbę kliknięć za każdym razem, gdy ktoś kliknie skrócony adres URL.

7. Czy ten skracacz adresów URL może być wykorzystany do celów komercyjnych?
Tak, ten skracacz adresów URL jest przeznaczony do użytku zarówno osobistego, jak i komercyjnego.

8. Jak mogę zabezpieczyć skracacz adresów URL przed złośliwym oprogramowaniem lub złośliwymi adresami URL?
Możesz zintegrow