Referencia API

API de Películas

API REST para consultar y gestionar una colección de películas con datos como título, descripción, año, género, calificación e imagen de portada.

Métodos disponibles: GET, POST, PUT y DELETE.

Base URL

https://devsapihub.com/api-movies

Puedes consumir esta API con cualquier cliente HTTP o directamente desde el navegador.

Endpoints

Listar películas

GET /api-movies GET

Retorna un array con todas las películas disponibles.

Obtener película por ID

GET /api-movies/:id GET

Retorna una película según el identificador enviado en la ruta.

GET /api-movies/1

Listar películas con límite

GET /api-movies/limit/:limit GET

Retorna un array limitado por el parámetro limit. Si el valor excede la cantidad disponible, devuelve solo los registros existentes.

GET /api-movies/limit/2

Ejemplo de respuesta:

[
  {
    "id": 1,
    "title": "The Shawshank Redemption",
    "description": "Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency.",
    "year": 1994,
    "image_url": "https://devsapihub.com/img-movies/1.jpg",
    "genre": "Drama",
    "stars": 5.0
  },
  {
    "id": 2,
    "title": "Jumanji",
    "description": "In Jumanji: The Next Level, the gang is back but the game has changed.",
    "year": 2019,
    "image_url": "https://devsapihub.com/img-movies/2.jpg",
    "genre": "Adventure",
    "stars": 3.4
  }
]

Filtrar películas por género (uno o varios)

GET /api-movies/genre/:genre GET

Retorna películas del género indicado en la ruta. También admite varios géneros separándolos por coma (sin espacios). La comparación no distingue mayúsculas/minúsculas.

Un solo género:

GET /api-movies/genre/Action

Varios géneros (separados por coma):

GET /api-movies/genre/Drama,Crime

Si no hay coincidencias, la API responde con error 404. Si no envías ningún género válido, responde con 400.

Filtrar películas por varios géneros (body JSON)

POST /api-movies/genres POST

Recibe un array de géneros en el body JSON. Devuelve todas las películas cuyo género coincida con cualquiera de los enviados (operación OR).

Body JSON requerido:

{
  "genres": ["Drama", "Crime"]
}

Si genres no es un array válido, la API responde con 400. Si no hay coincidencias, responde con 404.

Filtrar películas por estrellas

GET /api-movies/stars/:stars GET

Retorna películas con la calificación solicitada.

GET /api-movies/stars/5

Si no hay coincidencias, la API responde con error 404.

Crear película

POST /api-movies/movie POST

Body JSON requerido:

{
  "title": "El Código del Silencio",
  "description": "Un thriller tecnológico donde un joven hacker descubre una red secreta que controla los datos de millones de personas.",
  "year": 2023,
  "image_url": "https://devsapihub.com/img-movies/codigo-del-silencio.jpg",
  "genre": "Action",
  "stars": 4
}

Respuesta: recurso creado y listado actualizado en GET /api-movies.

Actualizar película

PUT /api-movies/movie/:id PUT

Ejemplo de consulta previa:

GET /api-movies/movie/2

Body JSON de actualización:

{
  "id": 2,
  "title": "Jumanji 2",
  "description": "In Jumanji: The Next Level, the gang is back but the game has changed.",
  "year": 2019,
  "image_url": "https://devsapihub.com/img-movies/2.jpg",
  "genre": "Adventure",
  "stars": 4
}

Respuesta: recurso actualizado con los nuevos valores.

Eliminar película

DELETE /api-movies/movie/:id DELETE

Elimina el recurso correspondiente al ID indicado.

DELETE /api-movies/3

Respuesta: listado actualizado consultable en GET /api-movies.

Filtrar películas por año

GET /api-movies/year/:year GET

Retorna películas correspondientes al año indicado.

GET /api-movies/year/2023

Si no hay coincidencias, la API responde con error 404.

Ejemplos de consumo

# Listar todas las películas
curl -X GET "https://devsapihub.com/api-movies"

# Obtener una película por ID
curl -X GET "https://devsapihub.com/api-movies/1"

# Filtrar por un solo género
curl -X GET "https://devsapihub.com/api-movies/genre/Drama"

# Filtrar por varios géneros separados por coma
curl -X GET "https://devsapihub.com/api-movies/genre/Drama,Crime"

# Filtrar por varios géneros enviando un array en el body JSON
curl -X POST "https://devsapihub.com/api-movies/genres" \
  -H "Content-Type: application/json" \
  -d '{"genres":["Drama","Crime"]}'

# Crear una nueva película
curl -X POST "https://devsapihub.com/api-movies/movie" \
  -H "Content-Type: application/json" \
  -d '{
        "title": "El Código del Silencio",
        "description": "Un thriller tecnológico.",
        "year": 2023,
        "image_url": "https://devsapihub.com/img-movies/codigo-del-silencio.jpg",
        "genre": "Action",
        "stars": 4
      }'
const getMovies = async () => {
  try {
    const res = await fetch("https://devsapihub.com/api-movies");
    const data = await res.json();

    if (!res.ok) {
      throw new Error("Error en la respuesta de la API");
    }

    console.log(data);
  } catch (error) {
    console.error("Error al obtener las películas:", error.message);
  }
};

getMovies();
import requests
response = requests.get("https://devsapihub.com/api-movies")
print(response.json())
import axios from "axios";

const getMovies = async () => {
  try {
    const res = await axios.get("https://devsapihub.com/api-movies");
    console.log(res.data);
  } catch (error) {
    console.error("Error al obtener las películas:", error.message);
  }
};

getMovies();
import { useEffect, useState } from 'react';

export default function App() {
  const [movies, setMovies] = useState([]);

  useEffect(() => {
    const getMovies = async () => {
      try {
        const resp = await fetch('https://devsapihub.com/api-movies');
        const data = await resp.json();

        setMovies(data);
      } catch (error) {
        console.error(error);
      }
    };

    getMovies();
  }, []);

  return (
    <>
      <h1>Películas</h1>
      {movies.map((movie) => (
        <div key={movie.id}>
          <img
            src={movie.image_url}
            alt={movie.title}
            style={{ width: '200px', height: '300px' }}
          />
          <h3>{movie.title}</h3>
          <p>{movie.description}</p>
          <p><strong>Género:</strong> {movie.genre}</p>
          <p>Estrellas: {movie.stars}</p>
        </div>
      ))}
    </>
  );
}
<?php
$response = @file_get_contents('https://devsapihub.com/api-movies');
$data = json_decode($response, true);

echo '<pre>';
echo $data ? print_r($data, true) : 'Error al obtener o decodificar los datos.';
echo '</pre>';
?>

Demo de interfaz

Ejemplo práctico de una vista de películas conectada a datos de API.

Explorar en CodePen