{"id":20009657,"url":"https://github.com/bgalvandev/starwars-api","last_synced_at":"2025-07-16T12:42:23.713Z","repository":{"id":258405466,"uuid":"867454132","full_name":"bgalvandev/starwars-api","owner":"bgalvandev","description":"Star Wars API construida con Serverless Framework y AWS DynamoDB, que permite interactuar con los personajes de Star Wars usando como fuente de datos SWAPI.","archived":false,"fork":false,"pushed_at":"2024-10-06T22:29:46.000Z","size":77,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-12T14:36:59.237Z","etag":null,"topics":["api","backend","serverless","swapi"],"latest_commit_sha":null,"homepage":"https://5bflv6oe25.execute-api.us-east-1.amazonaws.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bgalvandev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-04T05:16:54.000Z","updated_at":"2024-10-24T07:51:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"7393cee8-14e8-42a1-a33f-b91f537a826c","html_url":"https://github.com/bgalvandev/starwars-api","commit_stats":null,"previous_names":["bgalvandev/starwars-api"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bgalvandev%2Fstarwars-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bgalvandev%2Fstarwars-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bgalvandev%2Fstarwars-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bgalvandev%2Fstarwars-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bgalvandev","download_url":"https://codeload.github.com/bgalvandev/starwars-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241447523,"owners_count":19964314,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","backend","serverless","swapi"],"created_at":"2024-11-13T07:16:44.843Z","updated_at":"2025-03-02T01:43:21.833Z","avatar_url":"https://github.com/bgalvandev.png","language":"TypeScript","readme":"\u003cdiv align=\"center\"\u003e\n\n# Star Wars API\n\n**Star Wars API** es un proyecto construido con **Serverless Framework** y **AWS DynamoDB**. La API permite interactuar con los personajes del de Star Wars utilizando como fuente de datos **SWAPI** y traduce los objetos al español.\n\n\u003c/div\u003e\n\n## Características\n\n- **Integración con SWAPI**: Obtén información sobre personajes de Star Wars desde SWAPI y tradúcela al español.\n- **AWS DynamoDB**: Crea y consulta personajes almacenados en una tabla DynamoDB.\n- **Serverless Framework**: Marco de desarrollo para desplegar la API en **AWS Lambda**.\n- **Endpoints REST**: Existen dos conjuntos de endpoints, uno para interactuar con DynamoDB y otro para SWAPI.\n- **Arquitectura Limpia (Clean Architecture)**: Código organizado para facilitar su mantenimiento y extensibilidad.\n\n## Tabla de Contenidos\n\n- [Instalación](#instalación)\n- [Configuración](#configuración)\n- [Despliegue](#despliegue)\n- [Endpoints](#endpoints)\n- [Manejo de Errores](#manejo-de-errores)\n\n## Instalación\n\nPara clonar y ejecutar este proyecto localmente, sigue estos pasos:\n\n1. Clona este repositorio:\n\n   ```bash\n   git clone https://github.com/bgalvandev/starwars-api.git\n   ```\n\n2. Instala las dependencias:\n\n   ```bash\n   npm install\n   ```\n\n3. Compila el código TypeScript:\n   ```bash\n   npm run build\n   ```\n\n## Configuración\n\nEste proyecto utiliza un archivo `.env` para la configuración de las variables de entorno. Crea un archivo basado en el `.env.template` proporcionado:\n\n```bash\ncp .env.template .env\n```\n\nAsegúrate de configurar las siguientes variables en el archivo `.env`:\n\n```bash\nSWAPI_API_URL=https://swapi.dev/api\nAWS_REGION=us-east-1\nDYNAMODB_TABLE=PeopleTable\n```\n\n## Despliegue\n\n1. Inicia el despliegue a AWS con **Serverless Framework**:\n\n   ```bash\n   serverless deploy\n   ```\n\n2. Si deseas probar la API localmente antes de desplegar:\n   ```bash\n   serverless offline\n   ```\n\n## Endpoints\n\n### DynamoDB Endpoints\n\n1. **Obtener personajes de DynamoDB:**\n\n   ```bash\n   GET /api/dynamo/people\n   ```\n\n   - **Descripción**: Retorna los personajes almacenados en DynamoDB.\n   - **Paginación** `page`: Número de página (por defecto 1).\n\n     ```bash\n     GET /api/dynamo/people/?page=1\n     ```\n\n   - **Respuesta**:\n     ```json\n     {\n        \"conteo\": 10,\n        \"siguiente\": \"http://localhost:3000/api/dynamo/people?page=2\",\n        \"anterior\": null,\n        \"resultados\": [\n           {\n              \"id\": \"1\",\n              \"nombre\": \"Luke Skywalker\",\n              \"altura\": \"172\",\n              ...\n           }\n        ]\n     }\n     ```\n\n2. **Obtener personaje por ID de DynamoDB:**\n\n   ```bash\n   GET /api/dynamo/people/{id}\n   ```\n\n   - **Descripción**: Obtiene un personaje por ID almacenado en DynamoDB.\n\n   - **Respuesta** (Ejemplo):\n\n     ```json\n     {\n        \"id\": \"1\",\n        \"nombre\": \"Luke Skywalker\",\n        \"altura\": \"172\",\n        \"colorCabello\": \"blond\",\n        \"colorPiel\": \"fair\",\n        \"colorOjos\": \"blue\",\n        ...\n     }\n     ```\n\n3. **Crear un nuevo personaje en DynamoDB:**\n\n   ```bash\n   POST /api/dynamo/people\n   ```\n\n   - **Descripción**: Crea un nuevo personaje en DynamoDB.\n\n   - **Body** (Ejemplo):\n\n     ```json\n     {\n       \"id\": \"123\",\n       \"name\": \"Luke Skywalker\",\n       \"height\": \"172\",\n       \"mass\": \"77\",\n       \"hair_color\": \"blond\",\n       \"skin_color\": \"fair\",\n       \"eye_color\": \"blue\",\n       \"birth_year\": \"19BBY\",\n       \"gender\": \"male\",\n       \"homeworld\": \"Tatooine\",\n       \"films\": [\"A New Hope\", \"The Empire Strikes Back\"]\n     }\n     ```\n\n   - **Respuesta** (Ejemplo):\n\n     ```json\n     {\n       \"message\": \"Personaje creado exitosamente\",\n       \"personaje\": {\n         \"id\": \"123\",\n         \"nombre\": \"Luke Skywalker\",\n         \"altura\": \"172\",\n         \"masa\": \"77\",\n         \"colorCabello\": \"blond\",\n         \"colorPiel\": \"fair\",\n         \"colorOjos\": \"blue\",\n         \"añoNacimiento\": \"19BBY\",\n         \"genero\": \"male\",\n         \"mundoNatal\": \"Tatooine\",\n         \"peliculas\": [\"A New Hope\", \"The Empire Strikes Back\"]\n       }\n     }\n     ```\n\n### SWAPI Endpoints\n\n1. **Obtener personajes de SWAPI:**\n\n   ```bash\n   GET /api/swapi/people\n   ```\n\n   - **Descripción**: Retorna los personajes de Star Wars directamente desde SWAPI.\n   - **Paginación** `page`: Número de página (por defecto 1).\n\n     ```bash\n     GET /api/swapi/people/?page=1\n     ```\n\n   - **Respuesta**:\n\n     ```json\n     {\n        \"conteo\": 82,\n        \"siguiente\": \"http://localhost:3000/api/swapi/people?page=2\",\n        \"anterior\": null,\n        \"resultados\": [\n           {\n              \"id\": \"1\",\n              \"nombre\": \"Luke Skywalker\",\n              ...\n           }\n        ]\n     }\n     ```\n\n2. **Obtener personaje por ID de SWAPI:**\n\n   ```bash\n   GET /api/swapi/people/{id}\n   ```\n\n   - **Descripción**: Obtiene un personaje por ID directamente desde SWAPI.\n\n   - **Respuesta** (Ejemplo):\n     ```json\n     {\n        \"id\": \"\",\n        \"nombre\": \"Luke Skywalker\",\n        \"altura\": \"172\",\n        \"masa\": \"77\",\n        \"colorCabello\": \"blond\",\n        \"colorPiel\": \"fair\",\n        \"colorOjos\": \"blue\",\n        ...\n     }\n     ```\n\n## Manejo de Errores\n\nLa API utiliza códigos de estado HTTP para indicar el estadp de las operaciones:\n\n- **400 Bad Request**: Solicitud incorrecta.\n- **401 Unauthorized**: No autorizado.\n- **404 Not Found**: Recurso no encontrado.\n- **500 Internal Server Error**: Error interno del servidor.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbgalvandev%2Fstarwars-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbgalvandev%2Fstarwars-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbgalvandev%2Fstarwars-api/lists"}