This is the source code for a RESTful API to shorten URLs, built with Python and Django REST Framework. It allows users to register, authenticate, and manage their own shortened links with advanced options.
- User authentication: Registration and login system based on authentication tokens.
- URL shortening: Users can submit a long URL to receive a unique, short version.
- Click limit: A maximum number of redirections can be set for each shortened link (
max_touch_count). - Click tracking: Counter for the number of times a shortened link has been accessed.
- Custom metadata: Add a
labeland adescriptionto your links for better organization. - Redirection: The root path redirects to the original URL corresponding to the provided short code.
- Python
- Django
- Django REST Framework
-
Clone the repository:
git clone https://github.com/YarielZC/ylink-drf.git cd ylink-drf -
Create and activate a virtual environment:
python -m venv venv source venv/bin/activate # On Windows use `venv\Scripts\activate`
-
Install dependencies:
pip install -r requirements.txt
-
Run database migrations:
python manage.py migrate
-
Create a superuser (optional, for the admin panel):
python manage.py createsuperuser
-
Start the development server:
python manage.py runserver
The API will be available at
http://127.0.0.1:8000/.
The available API endpoints are detailed below:
-
POST /login/: Authenticates a user and returns an authentication token.Request Body:
{ "username": "your_username", "password": "your_password" }
-
POST /user/: Registers a new user.Request Body:
{ "username": "new_user", "email": "user@example.com", "password": "a_secure_password", "confirm_password": "a_secure_password" }
-
GET /api/v1/links/: Gets the list of shortened links for the authenticated user. -
POST /api/v1/links/: Creates a new shortened link.Parameters:
redirect_url(Required): The original URL to redirect to.max_touch_count(Optional): The maximum number of times the link can be accessed.label(Optional): A short label to identify the link.description(Optional): A more detailed description of the link.
-
GET /api/v1/links/<id>/: Gets the details of a specific shortened link. -
PUT /api/v1/links/<id>/: Updates a shortened link. -
DELETE /api/v1/links/<id>/: Deletes a shortened link.
GET /<short>: Redirects to theredirect_urlassociated with the short code (short).
-
Register a new user by sending a
POSTrequest to/user/with the required data. -
Get your authentication token by sending a
POSTrequest to/login/with your credentials. -
To create a shortened link, send a
POSTrequest to/api/v1/links/including the token in the Authorization header.Example Authorization header:
Authorization: Token YOUR_AUTH_TOKENExample request body:
{ "redirect_url": "https://www.a-very-long-example-url.com/this/is/a/long/path", "label": "My Test Link", "description": "This is a link for the README documentation", "max_touch_count": 100 } -
The response will provide you with the shortened URL and the details of the created link.
-
You can view the statistics for your links by making a
GETrequest to/api/v1/links/.
Contributions are welcome. Please open an issue to discuss any changes you would like to make.
Este es el código fuente de una API RESTful para acortar enlaces construida con Python y Django REST Framework. Permite a los usuarios registrarse, autenticarse y gestionar sus propios enlaces acortados con opciones avanzadas.
- Autenticación de usuarios: Sistema de registro e inicio de sesión basado en tokens de autenticación.
- Acortamiento de enlaces: Los usuarios pueden enviar una URL larga para recibir una versión corta y única.
- Límite de clics: Se puede establecer un número máximo de redirecciones para cada enlace acortado (
max_touch_count). - Seguimiento de clics: Contador de la cantidad de veces que se ha accedido a un enlace acortado.
- Metadatos personalizados: Agrega una etiqueta (
label) y una descripción (description) a tus enlaces para una mejor organización. - Redirección: La ruta principal redirige a la URL original correspondiente al enlace corto proporcionado.
- Python
- Django
- Django REST Framework
-
Clona el repositorio:
git clone https://github.com/YarielZC/ylink-drf.git cd ylink-drf -
Crea y activa un entorno virtual:
python -m venv venv source venv/bin/activate # En Windows usa `venv\Scripts\activate`
-
Instala las dependencias:
pip install -r requirements.txt
-
Realiza las migraciones de la base de datos:
python manage.py migrate
-
Crea un superusuario (opcional, para el panel de administración):
python manage.py createsuperuser
-
Inicia el servidor de desarrollo:
python manage.py runserver
La API estará disponible en
http://127.0.0.1:8000/.
A continuación se detallan los endpoints disponibles en la API:
-
POST /login/: Autentica a un usuario y devuelve un token de autenticación.Cuerpo de la petición:
{ "username": "tu_usuario", "password": "tu_contraseña" }
-
POST /user/: Registra un nuevo usuario.Cuerpo de la petición:
{ "username": "nuevo_usuario", "email": "usuario@ejemplo.com", "password": "una_contraseña_segura", "confirm_password": "una_contraseña_segura" }
-
GET /api/v1/links/: Obtiene la lista de enlaces acortados por el usuario autenticado. -
POST /api/v1/links/: Crea un nuevo enlace acortado.Parámetros:
redirect_url(Requerido): La URL original a la que se va a redirigir.max_touch_count(Opcional): El número máximo de veces que se puede acceder al enlace.label(Opcional): Una etiqueta corta para identificar el enlace.description(Opcional): Una descripción más detallada del enlace.
-
GET /api/v1/links/<id>/: Obtiene los detalles de un enlace acortado específico. -
PUT /api/v1/links/<id>/: Actualiza un enlace acortado. -
DELETE /api/v1/links/<id>/: Elimina un enlace acortado.
GET /<short>: Redirige alredirect_urlasociado con el código corto (short).
-
Registra un nuevo usuario enviando una petición
POSTa/user/con los datos requeridos. -
Obtén tu token de autenticación enviando una petición
POSTa/login/con tus credenciales. -
Para crear un enlace acortado, envía una petición
POSTa/api/v1/links/incluyendo el token en la cabecera de autorización.Ejemplo de cabecera de autorización:
Authorization: Token TU_TOKEN_DE_AUTENTICACIONEjemplo de cuerpo de la petición:
{ "redirect_url": "https://www.ejemplolargo.com/esto/es/un/enlace/muy/largo", "label": "Mi Enlace de Prueba", "description": "Este es un enlace para la documentación del README", "max_touch_count": 100 } -
La respuesta te proporcionará la URL acortada y los detalles del enlace creado.
-
Puedes ver las estadísticas de tus enlaces haciendo una petición
GETa/api/v1/links/.
Las contribuciones son bienvenidas. Por favor, abre un "issue" para discutir los cambios que te gustaría hacer.