HERE IS MY REST API :
https://quentinalais-denzel.glitch.me
The must-watch Denzel's movies
Table of Contents
Denzel Washington is one of my favorite actor.
He won 2 Oscars. Another 82 wins & 166 nominations
Build a REST and GRAPHQL API to get the must-watch Denzel's movies.
- Fork the project via `github`
- Clone your forked repository project `https://github.com/YOUR_USERNAME/denzel`
❯ cd /path/to/workspace ❯ git clone [email protected]:YOUR_USERNAME/denzel.git
- Do things
- Commit and push your different modifications
❯ cd /path/to/workspace/denzel ❯ git add -A && git commit -m "feat(movies): get a random movie" ❯ git push origin master
Note:
- why following a commit message convention?
- if you catch an error about authentication, add your ssh to your github profile.
- If you need some helps on git commands, read git - the simple guide
- A must-watch movie is a movie with a
metascore
higher than70
. - API should listen locally the port
9292
. - Data should be stored in MongoDB. Backed either with a DaaS: mLab, MongoDB Atlas etc... Either with a container Docker.
- To test and check your API, you should use a client like Insomnia or Postman
Populate the database with all the Denzel's movies from IMDb.
You could use the src/imdb.js ready-to-use exported function.
❯ curl -H "Accept: application/json" http://localhost:9292/movies/populate
{
"total": 56
}
Start node sandbox.js for an usage example.
Fetch a random must-watch movie.
❯ curl -H "Accept: application/json" http://localhost:9292/movies
{
"id": "tt0765429",
"link": "https://www.imdb.com/title/tt0765429/?ref_=nm_flmg_act_13",
"metascore": 76,
"poster": "https://m.media-amazon.com/images/M/MV5BMTkyNzY5MDA5MV5BMl5BanBnXkFtZTcwMjg4MzI3MQ@@._V1_UY268_CR4,0,182,268_AL_.jpg",
"rating": 7.8,
"synopsis": "An outcast New York City cop is charged with bringing down Harlem drug lord Frank Lucas, whose real life inspired this partly biographical film.",
"title": "American Gangster (2007)",
"votes": 362.951,
"year": 2007
}
Fetch a specific movie.
❯ curl -H "Accept: application/json" http://localhost:9292/movies/tt1907668
{
"id": "tt1907668",
"link": "https://www.imdb.com/title/tt1907668/?ref_=nm_flmg_act_7",
"metascore": 76,
"poster": "https://m.media-amazon.com/images/M/MV5BMTUxMjI1OTMxNl5BMl5BanBnXkFtZTcwNjc3NTY1OA@@._V1_UX182_CR0,0,182,268_AL_.jpg",
"rating": 7.3,
"synopsis": "An airline pilot saves almost all his passengers on his malfunctioning airliner which eventually crashed, but an investigation into the accident reveals something troubling.",
"title": "Flight (2012)",
"votes": 299.625,
"year": 2012
}
Search for Denzel's movies.
This endpoint accepts the following optional query string parameters:
limit
- number of movies to return (default: 5)metascore
- filter by metascore (default: 0)
The results array should be sorted by metascore in descending way.
❯ curl -H "Accept: application/json" http://localhost:9292/movies/search?limit=5&metascore=77
{
"limit": 5,
"results": [
{
"id": "tt2671706",
"link": "https://www.imdb.com/title/tt2671706/?ref_=nm_flmg_act_3",
"metascore": 79,
"poster": "https://m.media-amazon.com/images/M/MV5BOTg0Nzc1NjA0MV5BMl5BanBnXkFtZTgwNTcyNDQ0MDI@._V1_UX182_CR0,0,182,268_AL_.jpg",
"rating": 7.2,
"synopsis": "A working-class African-American father tries to raise his family in the 1950s, while coming to terms with the events of his life.",
"title": "Fences (2016)",
"votes": 84.291,
"year": 2016
},
{
"id": "tt0115956",
"link": "https://www.imdb.com/title/tt0115956/?ref_=nm_flmg_act_31",
"metascore": 77,
"poster": "https://m.media-amazon.com/images/M/MV5BODJlOTlkNzUtN2U2OC00NWUxLTg3MjgtNGVmZGU5ZTk0ZjM4XkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_UX182_CR0,0,182,268_AL_.jpg",
"rating": 6.6,
"synopsis": "A U.S. Army officer, despondent about a deadly mistake he made, investigates a female chopper commander's worthiness for the Medal of Honor.",
"title": "À l'épreuve du feu (1996)",
"votes": 46.271,
"year": 1996
},
{
"id": "tt0112857",
"link": "https://www.imdb.com/title/tt0112857/?ref_=nm_flmg_act_32",
"metascore": 78,
"poster": "https://m.media-amazon.com/images/M/MV5BNjI3NjFiNmMtMmQ1ZC00OTUwLWJlMWMtM2UxY2M2NDQ0OWJhXkEyXkFqcGdeQXVyNTI4MjkwNjA@._V1_UX182_CR0,0,182,268_AL_.jpg",
"rating": 6.7,
"synopsis": "An African-American man is hired to find a woman, and gets mixed up in a murderous political scandal.",
"title": "Le diable en robe bleue (1995)",
"votes": 15.686,
"year": 1995
}],
"total": 3
}
Save a watched date and a review.
This endpoint accepts the following post parameters:
date
- the watched datereview
- the personal review
❯ curl -X POST -d '{"date": "2019-03-04", "review": "😍 🔥"}' -H "Content-Type: application/json" http://localhost:9292/movies/tt0328107
{
"_id": "507f191e810c19729de860ea"
}
Same definitions as REST API with /graphql
endpoint.
- Populate the database
- Fetch a random must-watch movie
- Fetch a specific movie
- Search for Denzel's movies
- Save a watched date and a review.
schema {
query Query
}
type Query {
movies: [Movie]
movie: Movie
}
type Movie {
link: String
metascore: Int
synopsis: String
title: String
year: Int
}
❯ curl -d '{"query": "movie {link metascore synopsis title year}"}' -H "Content-Type: application/json" http://localhost:9292/graphql
{
"data": {
"movie": {
"link": "https://www.imdb.com/title/tt0174856/?ref_=nm_flmg_act_23",
"metascore": 74,
"synopsis": "The story of Rubin \"Hurricane\" Carter, a boxer wrongly imprisoned for murder, and the people who aided in his fight to prove his innocence.",
"title": "Hurricane Carter (1999)",
"year": 1999
}
}
}
Build a client side web application.
The MVP definiton could be:
Each time, we open the web application or refresh the page, fetch a random must-watch movie and
- display the title
- display the synopsis
- display the cover
- display the metascore
- display the review
- allow to open the IMDb record